问五:JAVA线程的六种状态?

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_18657175/article/details/89735868

参考源码注解进行修改添加

Thread.State

六个状态详解

新建(New):创建后还没有启动的线程状态

运行(Runnable):线程正在JVM中执行的状态,但它可能正在等待来自操作系统的其他资源(例如处理器资源)因此包含Running和Ready状态

阻塞(Blocked):处于阻塞状态的线程正在等待monitor锁的状态

无限期等待(Waiting):不会分配CPU执行时间,需要显式被唤醒

限期等待(Timed Waiting):在一定时间后会由系统自动唤醒

结束(Terminated):线程执行结束并且终止的状态


进入无限期等待的方法

没有设置Timeout参数的Object.wait()方法

没有设置Timeout参数的Thread.join()方法

LockSupport.park()方法

附:没有设置参数的join方法实际上调用的是wait(0)方法,如下图源码所示


进入限期等待的方法

设置了Timeout参数的Object.wait()方法

设置了Timeout参数的Thread.join()方法 

LockSupport.parkNanos

LockSupport.parkUntil


进入阻塞状态的操作

处于阻塞状态的线程正在等待监视器锁进入同步块/方法

调用Object.wait()后重新进入同步代码块或同步方法


状态转换图


join源码

猜你喜欢

转载自blog.csdn.net/qq_18657175/article/details/89735868