通用的线程生命周期
初始状态,指的是线程已经被创建,但是还不允许分配 CPU 执行。这个状态属于编程语言特有的,不过这里所谓的被创建,仅仅是在编程语言层面被创建,而在操作系统层面,真正的线程还没有创建。可运行状态,指的是线程可以分配 CPU 执行。在这种状态下,真正的操作系统线程已经被成功创建了,所以可以分配 CPU 执行。当有空闲的 CPU 时,操作系统会将其分配给一个处于可运行状态的线程,被分配到 CPU 的线程的状态就转换成了运行状态。运行状态的线程如果调用一个阻塞的 API(例如以阻塞方式读文件)或者等待某个事件(例如 条件变量),那么线程的状态就会转换到休眠状态,同时释放 CPU 使用权,休眠状态的线程永远没有机会获得 CPU 使用权。当等待的事件出现了,线程就会从休眠状态转换到可运行状态。线程执行完或者出现异常就会进入终止状态,终止状态的线程不会切换到其他任何状态,进入终止状态也就意味着线程的生命周期结束了Java 中线程的生命周期 BLOCKED、WAITING、TIMED_WAITING 可以理解为线程导致休眠状态的三种原因
RUNNABLE 与 BLOCKED 的状态转换
synchronized锁获取失败,阻塞RUNNABLE 与 WAITING 的状态转换
无参数的 Object.wait()无参数的 Thread.join()LockSupport.park()RUNNABLE 与 TIMED_WAITING 的状态转换
Thread.sleep(long millis)带超时参数的 Object.wait(long timeout)带超时参数的 Thread.join(long millis)LockSupport.parkNanos()LockSupport.parkUntil()