目录
🎄一,线程的状态
NEW: 安排了工作, 还未开始行动
RUNNABLE: 可工作的. 又可以分成正在工作中和即将开始工作.
BLOCKED: 这几个都表示排队等着其他事情
WAITING: 这几个都表示排队等着其他事情
TIMED_WAITING: 这几个都表示排队等着其他事情
TERMINATED: 工作完成了
新建(初始)
就绪(可运行)
运行
阻塞
死亡
🌸二,线程的状态转移
NEW , RUNNABLE ,TERMINATED 状态的转移
使用 isAlive 方法判定线程的存活状态
public class ThreadStateTransfer {
public static void main(String[] args) throws InterruptedException {
Thread t = new Thread(() -> {
for (int i = 0; i < 1000_0000; i++) {
}
}, "李四");
System.out.println(t.getName() + ": " + t.getState());;
t.start();
while (t.isAlive()) {
System.out.println(t.getName() + ": " + t.getState());;
}
System.out.println(t.getName() + ": " + t.getState());;
}
}
yield() 方法,让出 CPU执行权
/**
* yield让出CPU执行权
*/
public class ThreadYield {
public static void main(String[] args) {
Thread thread = new Thread(() ->{
Thread t1 = Thread.currentThread();
for (int i = 0; i < 10; i++) {
//让出CPU执行权
Thread.yield();
System.out.println("执行了线程" + t1.getName());
}
},"张三");
thread.start();
//创建并启动线程
new Thread(() -> {
Thread t1 = Thread.currentThread();
for (int i = 0; i < 10; i++) {
System.out.println("执行了线程" + t1.getName());
}
},"李四").start();
}
🍒三,线程的生命周期
- 新建:创建线程对象
- 就绪:线程有执行资格,没有执行权
- 运行:有执行资格,有执行权
- 阻塞:由于一些操作让线程改变了状态,没有执行资格,没有执行权,另一些操作可以把它给激活,激活处于就绪状态
- 死亡:线程对象变成垃圾,等待被回收