过程与线程:
过程:能够简略了解为运行中的程序。过程特点:线程:过程中的程序执行流。过程特点:
线程六大状态:
NEW、RUNNABLE、BLOCK、WAITING、TIMED_WAITING、TERMINATED
线程状态间的关系:
- 当应用 extend Thread、implement Runnable、implement Callable<Object> 等形式 new 一个新的线程类时,该线程类对应的线程状态即为 NEW。
- 当执行 run() 办法时,线程状态从 NEW 变为 RUNNABLE
- 如果执行了 wait() join() 等办法被动暂停了线程,线程进入 WAITING 状态,进入该状态不开释占用的锁。
- 如果执行了带超时工夫的 waitsleepjoin 办法被动暂停了线程,线程进入 TIMED_WAITING 状态,进入该状态同样不开释占用的锁。
- 如果线程运行到 synchronized 润饰的代码段或者应用 Lock 类进行加锁的代码时,如果无奈获取到锁,即进入 BLOCK 状态
- 如果线程在 BLOCK 状态下获取到锁、如果线程在 WAITING 状态下被被动唤醒、如果线程在 TIMED_WAITING 状态下被被动唤醒或者超时工夫到,即进入 RUNNABLE 状态。
- 当线程运行结束或者遇到意外退出时,状态变为 TERMINATED
- 学习操作系统时,会有 READY 和 RUNNING 这两个概念,其实应该是针对过程的说法,因为线程外部每次运行工夫都特地短,READY 与 RUNNING 切换特地频繁,没有必要严格继承操作系统那一套状态转移,所以 Thread 类源码中对此的定义也阐明了:A thread can be in only one state at a given point in time.These states are virtual machine states which do not reflect any operating system thread states. 意思是线程状态其实是虚拟机定义的状态,与操作系统 thread 的状态无关。(参考自 https://www.zhihu.com/question/56494969)