线程状态
线程状态的流程图
5种状态
- 初始状态:仅仅是新建了线程
- 可运行状态(就绪状态):指该线程被创建,可以由cpu调度执行
- 运行状态:获取了cpu时间片,正在运行;当cpu时间片用完,会进入到可运行状态
- 阻塞状态:如果调用了阻塞api,线程会释放cpu,不占据cpu资源
- 终止状态:线程执行完成后的状态
java线程6种状态
- New: 新创建的线程,尚未执行
- Runnable:调用了线程的start方法,线程进入runnable状态;java线程中将就绪ready和运行中running两种状态笼统的称为“运行”;当线程被调用了start方法,可能在等待cpu的使用权,此时处于就绪状态;就绪的线程在获得cpu时间片后变为运行中状态running
- Blocked: 线程被阻塞
- waiting: 线程在等待其他线程做出一些动作
- 超时等待time_waiting: 该状态不同于waiting,可以在规定的时间内自行返回
- 终止terminated: 线程执行完毕
java线程状态的实例
import java.util.concurrent.TimeUnit;
public class TestState {
public static void main(String[] args) throws InterruptedException {
Thread t1 = new Thread(() -> {
System.out.println("running...");
});
Thread t2 = new Thread(() -> {
while (true) {
}
});
t2.start();
Thread t3 = new Thread(() -> {
System.out.println("t3 running...");
});
t3.start();
Thread t4 = new Thread(() -> {
synchronized (TestState.class) {
try {
TimeUnit.SECONDS.sleep(9999);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
t4.start();
Thread t5 = new Thread(() -> {
try {
t2.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
});
t5.start();
Thread t6 = new Thread(() -> {
synchronized (TestState.class) {
try {
TimeUnit.SECONDS.sleep(9999);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
t6.start();
TimeUnit.SECONDS.sleep(1);
System.out.println(t1.getState());
System.out.println(t2.getState());
System.out.println(t3.getState());
System.out.println(t4.getState());
System.out.println(t5.getState());
System.out.println(t6.getState());
}
}