线程状态
简介
线程从新生到死亡的不同阶段。
阶段
- NEW
线程刚刚创建,还没有启动。 - RUNNABLE
可运行状态,由线程调度器可以安排执行。 - WAITING
等待被唤醒。 - TIMED WAITING
隔一段时间后自动唤醒。 - BLOCKED
被阻塞,正在等待锁。 - TERMINATED
线程结束
代码
复制public static class MyThread extends Thread{
@Override
public void run() {
System.out.println("线程状态2: "+this.getState());//RUNNABLE
try {
TimeUnit.SECONDS.sleep(2);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public static void MyThreadTwo() {
synchronized (ThreadState.class){
try {
// System.out.println("线程名:"+Thread.currentThread().getName()+new Date());
TimeUnit.SECONDS.sleep(3);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public static void MyThreadThree() {
try {
LockSupport.park();
TimeUnit.SECONDS.sleep(3);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public void comp() throws InterruptedException {
MyThread myThread = new MyThread();
//NEW
System.out.println("线程状态1: "+myThread.getState());
myThread.start();
TimeUnit.SECONDS.sleep(1);
//MyThread线程执行完成后,主线程再执行
//TIMED_WAITING
System.out.println("线程状态44: "+myThread.getState());
//myThread线程执行结束,主线程再执行
myThread.join();
//TERMINATED
System.out.println("线程状态33: "+myThread.getState());
Thread t2 = new Thread(ThreadState::MyThreadTwo, "t2");
Thread t3 = new Thread(ThreadState::MyThreadTwo, "t3");
Thread t4 = new Thread(ThreadState::MyThreadThree, "t4");
t2.start();
TimeUnit.SECONDS.sleep(1);
t3.start();
t4.start();
TimeUnit.SECONDS.sleep(1);
//WAITING
System.out.println("线程状态66: "+t4.getState());
//BLOCKED
System.out.println("线程状态55: "+t3.getState());
}
Gitee地址
XFS
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~