324线程状态概念和325等待唤醒案例分析


线程状态的概述

当线程被创建并启动以后,它既不是一启动就进入了执行状态,也不是一直处于执行状态。

在线程的生命周期中,有几种状态呢?在AP中java.lang. Thread. State这个枚举中给出了六种线程状态这里先列出各个线程状态发生的条件,下面将会对每种状态进行详细解析

线程状态理解:
我们创建了多个线程(新建状态)并调用start方法启动线程,这些线程有些抢到cpu执行权有些没有抢到,抢到的进入运行状态,没抢到的进入阻塞状态,如果运行状态中的线程执行完毕(run()方法结束),或者调用stop()强制关闭线程,或者run()方法中产生异常,则会进入死亡状态.
如果线程在运行状态执行时调用sleep(long)或者wait(long)方法,则会进入休眠(睡眠)状态,进行计时等待,等设定的时间到期则从休眠状态醒来进行cpu的抢夺,如果cpu正在使用,则进入阻塞状态进行等待抢夺cpu,如果cpu未使用则进入运行状态.
如果线程在运行状态调用了Object.wait()方法(不带参数),则线程进入无限(永久)等待状态,此状态与休眠状态的不同是休眠状态可以自己醒来,而无限等待状态不能自己醒来,需要调用Object.notify()方法使其被动进入运行状态(cpu空闲)或者阻塞状态(cpu不空闲).

324线程状态概念和325等待唤醒案例分析

 

 线程的六种状态

线程一共有六种状态
1.NEW 
2.RUNNABLE 
3.BLOCKED 
4.WAITING 
5.TIMED_WAITING 
6.TERMINATED 
 
下面分别说明下各种状态情况
1.NEW  线程创建完但未调用 start方法
 
2.RUNNABLE 可细分两种情况  
    1. 线程正在Java虚拟机中执行 
    2. 等待操作系统分配资源(例如CPU时间片)
 
3.BLOCKED 可细分两种情况:
    1. 准备进入synchronized修饰的代码块或方法,等待对象监视器锁 
    2. 已进入synchronized修饰的代码块或方法中并调用了Object.wait()方法
 
4.WAITING 有由一下三种情况触发
    1. Object.wait() 没有设置timeout(区别于 Object.wait(long timeout))
    2. thread.join() 没有设置timeout (区别于 thread.join(long timeout))
    3. LockSupport.park
 
5.TIMED_WAITING 线程指定了定时等待状态。有以下五种情况:
    1. 调用Thread.sleep
    2. Object.wait(long timeout) (这里区别于Object.wait(),有超时时间)
    3. thread.join(long) (这里区别于Thread.join(),有超时时间)
    4. LockSupport.parkNanos
    5. LockSupport.parkUntil
 
6.TERMINATED 线程执行完成。

324线程状态概念和325等待唤醒案例分析

 

 等待唤醒案例分析

等待唤醒案例分析

324线程状态概念和325等待唤醒案例分析

 

 

324线程状态概念和325等待唤醒案例分析

 

重点!!!

Wating状态在AP中介绍为:一个正在无限期等待另一个线程执行一个特别的(唤醒)动作的线程处于这一状态。

那么我们之前遇到过这种状态吗?答案是并没有,但并不妨碍我们进行一个简单深λ的了解。我们通过一段代码来

 

 

 

 

 

324线程状态概念和325等待唤醒案例分析

 

原创文章,作者:745907710,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/271957.html

(0)
上一篇 2022年7月8日 16:04
下一篇 2022年7月8日 16:14

相关推荐

发表回复

登录后才能评论