线程的状态、状态之间的相互转换
2023-04-18 13:13:17 时间
目录
一、线程的状态
线程的状态一共有 6 种:
- NEW:安排了工作,还未开始行动(调用 start 方法之前)。
- RUNNABLE:可工作的。又可分为正在工作中和即将开始工作。
- BLOCKED:表示排队等着其他事情。(同步阻塞,因为资源竞争而引起的阻塞(锁))
- WAITING:表示排队等着其他事情。(等待阻塞,需要其他线程唤醒)
- TIMED_WAITING:表示排队等着其他事情。(计时等待阻塞,只等待一定的时间)
- TERMINATED:工作完成了。
1. NEW
把 Thread 对象创建好了,但是还没有调用 start。
public static void main(String[] args) {
Thread t = new Thread(() -> {
});
System.out.println(t.getState()); //输出 NEW
}
2. TERMINATED
操作系统中的线程已经执行完毕,销毁了,但是 Thread 对象还在时,获取到的状态就是TERMINATED。
public static void main(String[] args) throws InterruptedException {
Thread t = new Thread(() -> {
});
t.start();
Thread.sleep(1000);
System.out.println(t.getState()); //输出 TERMINATED
}
3. RUNNABLE
就绪状态,处于这个状态的线程,就是在就绪队列中。即随时可以被调度到 CPU上。如果代码中没有进行 sleep ,也没有进行其他的可能导致阻塞的操作,代码大概率是处在 RUNNABLE 状态。
public static void main(String[] args) throws InterruptedException {
Thread t = new Thread(() -> {
while(true) {
//这里什么都不能有
}
});
t.start();
Thread.sleep(1000);
System.out.println(t.getState()); //输出 RUNNABLE
}
上述代码中,t 线程里一直持续不断的执行循环,随时系统向调度它上 CPU 都是可以的。
4. TIMED_WAITING
代码中调度了 sleep(或者join(超时时间)) ,就会进入 TIMED_WAITING 状态。意思就是当前的线程在一定时间之内,是阻塞状态。一定时间结束后,阻塞状态解除。
public static void main(String[] args) throws InterruptedException {
Thread t = new Thread(() -> {
while(true) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
t.start();
Thread.sleep(1000);
System.out.println(t.getState()); //输出 TIMED_WAITING
}
上述代码中,因为 t 线程循环内部只有 sleep 方法,所以该线程大概率一直处在 sleep 中,因此获取 t 线程状态显示 TIMED_WAITING。
5. BLOCKED
当前线程在等待锁,导致了阻塞(阻塞状态之一)。使用 sychronized 时候,可能会出现该状态。
6. WAITING
当前线程在等待唤醒,导致了阻塞(阻塞状态之一)。使用 wait 时候,可能会出现该状态。
二、线程状态转换
1. 线程状态转换简图
相关文章
- 华为张文林:拥抱数字化机遇,共建智能世界
- 押注混合云和人工智能,分拆后的IBM能成功吗?
- 给在本机运行的 React 程序配置 HTTPS
- 混合云迁移策略的五个关键因素
- 为什么HashSet里value不是null?
- 诺基亚:到2030年,5G将为全球GDP增加8万亿美元
- 2021年有哪些云计算技术会成为主流?
- SAP中如何把屏幕数据复制到excel中
- 赵厚麟:宽带发展成就不凡但仍存不小挑战 全球产业界需充分协同合作
- 助力清廉亚运 网易云信与杭州奥体博览中心滨江建设指挥部达成重要合作
- flutter 日历展示插件
- SAP STMS-请求号跨系统传输报错TW104
- 中国SaaS这个局,AI能破吗?
- Scala语法详解:特质 (Traits)
- 智造未来,中德携手共推智能制造创新升级
- 解构隐私信息泄漏难题,数安行提出数据运营安全新理念
- Intellij IDEA 导入公司老web项目 从eclipse里
- 什么是DDOS攻击?
- 中国计算机学会公布2020年“CCF杰出工程师奖” 阿里巴巴林昊获选
- DNS劫持是什么意思?