过程与线程:
过程:能够简略了解为运行中的程序。 过程特点:线程:过程中的程序执行流。 过程特点:
线程六大状态:
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)