线程状态图

线程可以拥有自己的操作栈,程序计数器,局部变量表等资源,它与同一进程内的其他线程共享该进程的所有资源(所有的初始化的资源,因为局部变量表往往是副本/引用副本)。

线程状态有五种:New 新建,Runnable 就绪, Running 运行 ,Blocked 阻塞,dead 终止。

下面的线程状态图,有关于的阻塞态的切换需要改一下


Cache_-28eb610a3ed2f72d..jpg

New新建:即采用我们的Thread/Runnable/线程池/Callable创建出来的线程

Runnable 就绪:调用start之后运行之前的状态。

Running 运行:调用run时候的状态,表明线程正在执行。线程可能会因为某些因素而退出Running,如时间,异常,锁,调度

Blocked 阻塞:

  1. 等待阻塞:调用了Object.wait()(进入了对象锁的Waiting Set),需要用notify来唤醒(弃用)
  2. 同步阻塞/锁阻塞:锁被其它线程占用(参考monitor锁的锁池)
  3. 主动阻塞:调用Thread的某些方法,出让CPU执行权(比如sleep,join等),或者发出了I/O请求。

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

join方法用于在某一个线程的执行过程中调用另一个线程执行,等到被调用的线程执行结束后,再继续执行当前线程,如:t.join//主要用于等待t线程执行结束,main线程阻塞,若无此句,main则会执行完毕,导致结果不可测。

你可能感兴趣的:(线程状态图)