问五:JAVA线程的六种状态及所有切换途径?

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

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源码

 

 

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务