线程的状态
线程的状态

线程被创建时,属于新建状态,调用start后进入就绪状态
就绪状态被cpu调用时,进入运行状态
运行状态在调用sleep、wait、join后会进入阻塞状态
运行状态执行完成后会进入死亡状态,这里包括正常执行完毕和异常执行完毕
运行状态在os切换时,线程会进入就绪状态
线程wait进入阻塞状态,被调用notify之后,会进入就绪状态
线程sleep进入阻塞状态,时间过后会进入就绪状态
当前线程的子线程join之后,当前线程进入阻塞状态,在子线程死亡之后,当前线程进入就绪状态
阻塞状态的线程,被中断之后会进入死亡状态
线程相关的一些方法解析
sleep
详细描述:
Thread类的静态方法
public static native void sleep(long millis) throws InterruptedException;
使当前线程睡眠n毫秒,线程从运行状态进入阻塞状态,n毫秒之后重新进入就绪状态,继而进入运行状态
进入阻塞状态后可以被中断
被调用t.interrupt()之后,该线程会被中断,sleep方法处抛出InterruptedException,捕获之后可以做相应处理
join
Thread类的非静态方法
public final void join() throws InterruptedException
使用举例:
Thread t = new Thread();
t.start();
t.join();
这里定义主线程main,子线程t
main调用t.join之后会进入阻塞状态,等待t线程的完结,t完结之后,main线程进入就绪状态
main线程在调用t.join之后,也可以被interrupt()中断。
yield
Thread类的非静态方法
public static native void yield();
当前线程主动让出cpu,从运行状态进入就绪状态,这个动作并不是立即执行的
interrupt
Thread类的非静态方法
public void interrupt()
线程对象调用interrupt之后,会从阻塞状态退出来,并抛出InterruptedException异常
wait
Object类的方法
public final void wait() throws InterruptedException
使用举例
Object obj;
obj.wait();
此方法必须在同步块中调用,wait之后线程进入阻塞状态,当是不会释放对象的锁
被调用interrupt()之后,该线程会被中断,抛出InterruptedException
notify
Object类的方法
public final native void notify()
Object obj;
obj.notify();
此方法会唤醒在对象obj上wait的线程,只会唤醒一个
notifyAll
Object类的方法
public final native void notifyAll();
Object obj;
obj.notifyAll();
此方法会唤醒在对象obj上wait的所有线程
出处:http://www.cnblogs.com/tangyanbo/
本文以学习、研究和分享为主,欢迎转载,但必须在文章页面明显位置给出原文连接。 如果文中有不妥或者错误的地方还望高手的你指出,以免误人子弟。如果觉得本文对你有所帮助不如【推荐】一下!如果你有更好的建议,不如留言一起讨论,共同进步! 再次感谢您耐心的读完本篇文章。欢迎加QQ讨论群
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?