j艾薇a线程状态转换图
j艾薇a线程运行过程中的各个状态的转换如下图:
实例化后New
New–>RUNNABLE
Thread.start() ==>系统调度
? running—>ready <==Thread.yield
? ready–>running
RUNNABLE–>WAITING Object.wait() Thread.join() LockSupport.park()
RUNNABLE–>TIME_WAITING Object.wait(long) Thread.sleep(long) Thread.join(long) LockSupport.parkNanos() LockSupport.parkUntil()
RUNNABLE–>BLOCKED 等待进入synchronized方法 等待进入synchronized块
RUNNABLE–>TERMINATED
WAITING–>RUNNABLE Object.notify() Object.notifyAll() LockSupport.unpark(Thread)
TIME_WAITING–>RUNNABLE Object.notify() Object.notifyAll() LockSupport.unpark(Thread)
BLOCK–>RUNNABLE
yield
暂停当前正在执行的线程对象。
yield()只是使当前线程重新回到可执行状态,所以执行yield()的线程有可能在进入到可执行状态后马上又被执行。
yield()只能使同优先级或更高优先级的线程有执行的机会。
yield()从未导致线程转到等待/睡眠/阻塞状态。在大多数情况下,yield()将导致线程从运行状态转到可运行状态,但有可能没有效果。