加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java线程四种状态

发布时间:2020-12-15 07:16:02 所属栏目:Java 来源:网络整理
导读:欢迎访问我的最新博客:https://blog.fanscore.cn 一个线程可以有四种状态: 1、新(new),即线程刚刚创建,而并未执行 2、可运行(runnable),意味着一旦时间分片机制有空闲的CPU周期提供给一个线程,那个线程便可立即开始运行。因此,线程可能在、也可能不

欢迎访问我的最新博客:https://blog.fanscore.cn

一个线程可以有四种状态:

1、新(new),即线程刚刚创建,而并未执行

2、可运行(runnable),意味着一旦时间分片机制有空闲的CPU周期提供给一个线程,那个线程便可立即开始运行。因此,线程可能在、也可能不在运行当中,但一旦条件许可,没有什么能阻止它的运行——它既没有“死”掉,也未被“堵塞”。

3、Dead,从自己的run()方法中返回后,一个线程便已“死”掉。亦可调用 stop()令其死掉,但会产生一个违例——属于Error的一个子类(也就是说,我们通常不捕获它)。记住一个违例的“掷”出应当是一个特殊事件,而不是正常程序运行的一部分。所以不建议你使用stop()(在Java 1.2 则是坚决反对)。另外还有一个destroy()方法(它永远不会实现),应该尽可能地避免调用它,因为它非常武断,根本不会解除对象的锁定。

4、阻塞(Blocked),线程可以运行,但有某种东西阻碍了它。若线程处于堵塞状态,调度机制可以简单地跳过它,不给它分配任何CPU时间。除非线程再次进入“可运行”状态,否则不会采取任何操作。为什么会阻塞呢,原因有:
  (1)调用sleep(毫秒数),使线程进入“睡眠”状态。在规定的时间内,这个线程是不会运行的。?

  (2)用suspend()暂停了线程的执行。除非线程收到 resume()消息,否则不会返回“可运行”状态。?

  (3)用wait()暂停了线程的执行。除非线程收到 nofify()或者notifyAll()消息,否则不会变成“可运行”

  (4)线程正在等候一些 IO(输入输出)操作完成。

  (5)线程试图调用另一个对象的“同步”方法,但那个对象处于锁定状态,暂时无法使用。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读