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

Thread.State

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

六个状态详解

新建(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()后重新进入同步代码块或同步方法

 


状态转换图

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

图片来源

 


join源码

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

 

 

相关文章:

  • 2021-08-26
  • 2021-08-06
  • 2021-06-06
  • 2022-12-23
  • 2022-01-17
  • 2021-09-03
  • 2021-12-05
  • 2022-02-14
猜你喜欢
  • 2022-02-27
  • 2021-08-17
  • 2021-12-23
  • 2021-07-03
  • 2021-07-26
  • 2021-06-08
相关资源
相似解决方案