线程状态的转换
Java 中有六种状态:RUNNABLE(运行状态),WAITING(等待状态),READY(就绪状态),TIMED_WAITING(超时等待),BLOCKEND(阻塞状态),TERMINATED(终止状态)。
- RUNNING(运行状态) 与 READY(就绪态)根据系统调用进行切换。
- WAITING(等待状态)切换到 READY(就绪态):Object.wait()、Object.join()、LockSupport.park()。
- READY/RUNNING(就绪/运行态)切换到 WAITING(等待状态):Object.notify()、Object.notifyAll()、LockSupport.unpark(Thrad)。
- TMED_WAITING(超时等待状态)切换到 READY(就绪态):Thread.sleep(long)、Object.wait(long)、Thread.join(long)、LockSupport.parkNanos()、LockSupport.parkUntil()。
- READY/RUNNING(就绪/运行态)切换到 TMED_WAITING(超时等待状态):Object.notify()、Object.notifyAll()、LockSupport.unpark(Thread)、超时时间到期。
- BLOCKED(阻塞状态)切换到 READY(就绪态):获取到锁即可。
- READY/RUNNING(就绪/运行态)切换到 BLOCKED(阻塞状态):等待进入 synchronized 方法、等待进入 synchronized 块。