前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >线程的状态分为几种

线程的状态分为几种

原创
作者头像
好派笔记
修改2021-10-08 14:52:19
1K0
修改2021-10-08 14:52:19
举报
文章被收录于专栏:好派笔记

新建(New)

  当用new操作符创建一个线程时, 例如new Thread(r),线程还没有开始运行,此时线程处在新建状态。此时还没有开始运行线程中的代码。

可运行(Runable)

  一个新创建的线程并不自动开始运行,要执行线程,必须调用线程的start()方法。当start()方法返回后,线程就处于就绪状态。   Runable包括了操作系统线程状态中的Running和Ready,也就是处于此状态的线程有可能正在执行,也有可能正在等待着CPU为它分配执行时间。线程进人Runnable状态大体分为如下5种情况:

  • 调用sleep()方法,达到指定休眠时间返回。
  • 线程调用的阻塞IO已经返回,阻塞方法执行完毕。
  • 线程成功地获得了请求的对象锁。
  • 线程正在等待某个通知,其他线程发出了通知。
  • 处于挂起状态的线程调用了 resume恢复方法。

阻塞(Blocked)

  线程被阻塞了,“阻塞状态”与“等待状态”的区别是:“阻塞状态”一般在等待着获取到一个排他锁,这个事件将在另外一个线程放弃这个锁的时候发生;而“等待状态”则是在等待一段时间,或者等待唤醒动作的发生。在程序等待进入同步区域的时候,线程将进入这种阻塞状态。

无限期等待(Waiting):

  处于这种状态的线程不会被分配CPU执行时间,它们要等待被其他线程显式地唤醒。某一线程因为调用下列方法之一而处于等待状态:

  • 不带超时值的 Object.wait ()
  • 不带超时值的 Thread.join ()
  • LockSupport.park ()

限期等待(Timed Waiting):

  处于这种状态的线程也不会被分配CPU执行时间,不过无须等待被其他线程显式地唤醒,在一定时间之后它们会由系统自动唤醒。以下方法会让线程进入限期等待状态:

  • 设置了sleeptime参数的Thread.sleep()方法;
  • 设置了Timeout参数的Object.wait()方法;
  • 设置了Timeout参数的Thread.join()方法;
  • LockSupport.parkNanos()方法;
  • LockSupport.parkUntil()方法。

结束(Terminated):

  已终止线程的线程状态,线程已经结束执行。可以看停止线程的方式。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 新建(New)
  • 可运行(Runable)
  • 阻塞(Blocked)
  • 无限期等待(Waiting):
  • 限期等待(Timed Waiting):
  • 结束(Terminated):
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档