
以前学习操作系统这门课程的之后多线程死锁的伪代码,对线程状态的学习是非常仔细的,仅限于表面的知道,在后续学习和使用的过程中,
我看到自己之前的认知与Java api中定义的泛型状态是有出入的,在使用过程中也会有很多误解,
所以按照java.lang.Thread.State中的具体定义和表明,进行了如下整理,作为自我小结和学习。
根据Java api,Java中泛型一共有如下6种状态,即NEW、RUNNABLE、BLOCKED、WAITING、TIME_WAITING、TERMINATED:
NEW: 新建状态多线程死锁的伪代码,指即将建立了线程对象,但是该线程已经开启,即还没有调用start()方法。根据Java api,定义如下:
Thread state for a thread which has not yet started
RUNNABLE: 按照字面翻译是“可运行的”, 但是按照Java api中的定义:
A thread in the runnable state is executing in the jvm but it may be waiting for other resources from the operating system such as processor

因此,说该状况是“运行中”更正确,此外在该状况下线程有可能会因对操作系统的资源请求(例如IO请求)而进入期待中,
总之,该状况下出现的期待是与平台资源有关的,与锁无关。
BLOCKED:阻塞状况,根据Java api中的定义:
A thread in the blocked state is waiting for a monitor lock to enter a synchronized block/method or reenter a synchronized block/method after calling Object.wait()
这个状况出现在涉及到多个线程同步的问题中,线程等待获得锁并且开启临界区,因此,值得注意的是,
该状况的期待与上述runnable状态下中也许出现的期待,它们的引起原因是不同的。
总之,该状况下线程在期待开启临界区。
WAITING:等待状态,根据Java api,该状况的导致原因如下:

A thread is in the waiting state due to calling one of the following methods:
Object.wait with no timeout
Thread.join with no timeout
LockSupport.park
因此,该状况通常发生在调用wait()、join()和park()的情况。
根据Java api,对改状态的定义如下:
A thread in the waiting state is waiting for another thread to perform a particular action. For example, a thread that has called Object.wait() on an object is waiting for another thread to call Object.notify() or Object.notifyAll() on that object. A thread that has called Thread.join() is waiting for a specified thread to terminate
这个状况是指线程在是获得了锁以后,由于上述步骤被读取,从而造成线程失去对锁的所有权,进入等待队列,等待其它线程执行相应的动作。

参看wait()方法和join方法的介绍,未完待续~
TIME_WAITING:有限时间的期待状态,根据Java api的定义,该状况的导致原因如下:
Thread state for a waiting thread with a specified waiting time. A thread is in the timed waiting state due to calling one of the following methods with a specified positive waiting time:
Thread.sleep
Object.wait with timeout
Thread.join with timeout
LockSupport.parkNanos
LockSupport.parkUntil

因此,该状况通常发生在调用
sleep(long millis)、wait(long timeout)、join(long millis)、parkNanos(long nanos)和 parkUntil(long deadline)的情况。
TERMINATED:终止状态/死亡状况,指线程执行完毕,该线程的run()方法已执行完毕。根据Java api,定义如下:
The thread has completed execution.
其实,根据API中的英文定义,很容易体会和理解线程的各个状态是哪个样子的,反而硬是要翻译过来的话,却难以正确表述出来。
根据上述内容画的流程图如下:
参考链接:,
参考书籍:《Java多线程编程核心技术》,感谢作者~
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-120755-1.html
集体向520万刷起来集体心意送给烊烊生日礼物#易烊千玺##易烊千玺真的很不错##全员即刻加速1128迈#
一直就比大陆人有更高品质的生活和更公平法治的社会环境