线程的状态

2019 精帖
0 728


线程共包括以下5种状态。

1. 新建状态(New)         : 线程对象被创建后,就进入了新建状态。例如,Thread thread = new Thread()。

2. 就绪状态(Runnable): 也被称为“可执行状态”。线程对象被创建后,其它线程调用了该对象的start()方法,从而来启动该线程。例如,thread.start()。处于就绪状态的线程,随时可能被CPU调度执行。

3. 运行状态(Running) : 线程获取CPU权限进行执行。需要注意的是,线程只能从就绪状态进入到运行状态。

4. 阻塞状态(Blocked)  : 阻塞状态是线程因为某种原因放弃CPU使用权,暂时停止运行。直到线程进入就绪状态,才有机会转到运行状态。阻塞的情况分三种:

    (01) 等待阻塞 -- 通过调用线程的wait()方法,让线程等待某工作的完成。

    (02) 同步阻塞 -- 线程在获取synchronized同步锁失败(因为锁被其它线程所占用),它会进入同步阻塞状态。

    (03) 其他阻塞 -- 通过调用线程的sleep()或join()或发出了I/O请求时,线程会进入到阻塞状态。当sleep()状态超时、join()等待线程终止或者超时、或者I/O处理完毕时,线程重新转入就绪状态。

5. 死亡状态(Dead)    : 线程执行完了或者因异常退出了run()方法,该线程结束生命周期。

 image.png

image.png

各种状态一目了然,值得一提的是"blocked"这个状态:

线程在Running的过程中可能会遇到阻塞(Blocked)情况


1.调用join()和sleep()方法,sleep()时间结束或被打断,join()中断,IO完成都会回到Runnable状态,等待JVM的调度。

2..调用wait(),使该线程处于等待池(wait blocked pool),直到notify()/notifyAll(),线程被唤醒被放到锁定池(lock blocked pool ),释放同步锁使线程回到可运行状态(Runnable)

3.对Running状态的线程加同步锁(Synchronized)使其进入(lock blocked pool ),同步锁被释放进入可运行状态(Runnable)。

此外,在runnable状态的线程是处于被调度的线程,此时的调度顺序是不一定的。Thread类中的yield方法可以让一个running状态的线程转入runnable。


留言(0)
加载更多
猜你喜欢
  • ofc 消息中间件activemqhelloworld

    消息中间件activemqhelloworld
  • blog 并发编之-java线内存模型(JMM)和volatile关键字理解

    硬件效率与一致性         在正式讲解Java虚拟机并发相关知识之前,我们先花费一点时间去了解一下物理计算机中并发问题,物理机遇到并发问题与虚拟机中情况有不少相似之处,物理机对并发
  • file java 动编译测试

    <p><img src="http://www.jiajiajia.club:8089/weblog/2019_11_26/7a46618a-a787-4a1f-a80c-22119e4ae248.p
  • blog 为什么静方法不能new非静内部类实例对象?

    方法不能new内部类实例对象解析:我们知道非静内部类有一个特点就是可以访问外部类对象非静属性,而外部类属性只有再创建对象以后才有,而静方法属于类,不属于对象,所以再main方法执行时候并没有创建Main4实例对象,而这
  • blog linux查看进命令

    linux下查看进命令1、ps 命令用于查看当前正在运行。grep 是搜索例如: ps -ef | grep java表示查看所有进里 CMD 是 java 信息2、ps -aux | grep java-aux 显示所有
  • blog linux中ctrl+z和ctrl+c区别

    ctrl+c和ctrl+z都是中断命令,但是他们作用却不一样.ctrl+c强制中断序ctrl+z是将任务中断,挂起,ctrl+c是强制中断执行。ctrl+z是将任务中断.但是此任务并没有结束,他仍然在进中他只是维持挂起
  • blog html线条动背景(线条随鼠标变动)

    样式   js代码 记得引入jq <script type='text/javascript' src='http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js'
  • file ToDesk免费桌面连接工具

    <p>ToDesk免费桌面连接工具</p> <p><img src="http://photo.jiajiajia.club/weblog/2020_08_10/b995cf0c-a498-47
  • blog java线通讯之生产者消费者模式

    java线通讯之生产者消费者模式         生产者消费者模式是并发、多线中经典设计模式,生产者和消费者通过分离执行工作解耦,简化了开发模式,生产者和消费者可以以不同速度生产和消费
  • blog 有关线常用方法总结

    构造方法 1.Thread(Runnable target)。参数为实现了Runnable接口类。 2.Thread(String name)。参数为线名字。 3.Thread(Runnable target,Str