关于java:Java线程的六个状态详解

2次阅读

共计 777 个字符,预计需要花费 2 分钟才能阅读完成。

在 java 的 API 文档里,Thread 类有一个外部类 State,形容了线程的六个状态。见下图。

首先讲一下三个最根本的状态:就绪态、运行态、终止态。


NEW:就绪态
new Thread(); 或者
new Thread 子类();
这两行代码执行后,线程就处于就绪态,此时线程没有开启。


RUNNABLE:可运行
线程调用 start() 办法能够进入到可运行状态。
可运行状态就是线程能够在 java 虚拟机中运行的状态。此时他可能 正在运行 ,也有可能 正在期待 因为 cpu 要不停地切换执行线程。留神 这两种状态都是可运行状态。


Teminated(被终止)
因为线程的 run 办法失常执行完结或者被调用了 stop 办法被终止,这个时候就是被终止状态。


接下来是另外三个状态
Blocked(锁阻塞)
在线程处于可运行状态的时候,他可能会尝试获取锁。
如果他没有获取到锁,那么这个过程就处于阻塞态。
如果获取到了锁,就转成了可运行态。


Waiting(有限期待)
线程调用 wait() 办法,此时从运行态变成了有限期待。
进入此状态后,线程始终期待被其余线程唤醒,也就是期待其余线程获取此对象的锁,执行 notify()
如果唤醒者线程 获取此线程的锁 胜利执行了 notify(),这个线程就被唤醒,进入到可运行。
如果唤醒者线程没有胜利胜利获取锁,可运行状态进入到阻塞态。(尝试获取锁)


Timed Waiting(计时期待)
和无线期待相似,这里指定了等待时间,在这个工夫内始终期待被唤醒。常见的 Thread.sleep 办法和 wait(long time) 办法。
可运行态调用 Thread.sleep 办法或 wait(long time) 办法进入此状态。
等待时间内,获取到了锁,被唤醒进入可运行状态。
等待时间到,获取到了锁,被唤醒进入可运行状态。
等待时间完结,没有获取到锁,进入阻塞态。


最初放上一张图,(图片起源:刘乃源老师上课画的)

正文完
 0