java 线程状态转换图解

java线程状态转换图

java线程运行过程中的各个状态的转换如下图:

  1. 实例化后New

  2. New-->RUNNABLE

    Thread.start() ==>系统调度

    ​ running—>ready <==Thread.yield

    ​ ready-->running

  3. RUNNABLE-->WAITING Object.wait() Thread.join() LockSupport.park()

  4. RUNNABLE-->TIME_WAITING Object.wait(long) Thread.sleep(long) Thread.join(long) LockSupport.parkNanos() LockSupport.parkUntil()

  5. RUNNABLE-->BLOCKED 等待进入synchronized方法 等待进入synchronized块

  6. RUNNABLE-->TERMINATED

  7. WAITING-->RUNNABLE Object.notify() Object.notifyAll() LockSupport.unpark(Thread)

  8. TIME_WAITING-->RUNNABLE Object.notify() Object.notifyAll() LockSupport.unpark(Thread)

  9. BLOCK-->RUNNABLE

yield

  1. 暂停当前正在执行的线程对象。
  2. yield()只是使当前线程重新回到可执行状态,所以执行yield()的线程有可能在进入到可执行状态后马上又被执行。
  3. yield()只能使同优先级或更高优先级的线程有执行的机会。
  4. yield()从未导致线程转到等待/睡眠/阻塞状态。在大多数情况下,yield()将导致线程从运行状态转到可运行状态,但有可能没有效果。

你可能感兴趣的