线程的状态

线程的状态

 

 

线程被创建时,属于新建状态,调用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的所有线程

 

posted @   风过无痕的博客  阅读(402)  评论(0编辑  收藏  举报
编辑推荐:
· 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,谁才是开发者新宠?
点击右上角即可分享
微信分享提示