Java并发编程:线程各种状态之间的转换

本文详细阐述了Java线程的十种状态转换,包括NEW、RUNNABLE、BLOCKED、WAITING、TIMED_WAITING和TERMINATED等,通过wait()、notify()、join()、sleep()、park()等方法的调用来描述线程如何在这些状态间切换。理解这些状态转换对于优化并发编程至关重要。
摘要由CSDN通过智能技术生成

BLOCKED,WAITING,TIMED_WAITING的区别请看另外一篇帖子:https://blog.csdn.net/qq_41834553/article/details/112626166

 

1、NEW←→RUNNABLE

当调用t.start()方法时,会由NEW→RUNNABLE

 

2、RUNNABLE←→WAITING

当调用obj.wait()方法时,t线程会从RUNNABLE→WAITING

当调用obj.notify()/obj.notifyall()/t.interrupt()方法时:

1)竞争锁成功,t线程从WAITING→RUNNABLE

2)竞争锁失败,t线程从WAITING→BLOCKED

 

3、RUNNABLE←→WAITING

当前线程调用t.join()方法时,当前线程从RUNNABLE→WAITING

t线程运行结束或者调用了当前线程的interrupt()方法时,当前线程从WAITING→RUNNABLE(注意是哪个线程调用join方法,该线程等待目标线程对象)

 

4、RUNNABLE←→WAITING

当前线程调用LockSupport.park()方法时会让当前线程从RUNNABLE→WAITING

调用LockSupport.unpark()方法或者调用了线程的interrupt()方法,会让目标线程从WAITING→RUNNABLE

 

5、RUNNABLE←→TIMED_WAITING

t线程使用synchronized(obj)获取了对象锁以后

1)调用obj.wait(long n)方法时,t线程从RUNNABLE→TIMED_WAITING

2)t线程等待时间超过了n毫秒,或者调用了obj.notify(),obj.notifyall(),t.interrupt()时:

     ①竞争锁成功,t线程从TIMED_WAITING→RUNNABLE

     ②竞争锁失败,t线程从TIMED_WAITING→BLOCKED

 

6、RUNNABLE←→TIMED_WAITING

当前线程调用t.join(long n)方法时,当前线程从RUNNABLE→TIMED_WAITING

当前线程等待时间超过了n毫秒,当前线程从TIMED_WAITING→RUNNABLE

 

7、RUNNABLE←→TIMED_WAITING

当前线程调用了Thread.sleep(long n),当前线程从RUNNABLE→TIMED_WAITING

当前线程等待时间超过了n毫秒,当前线程从TIMED_WAITING→RUNNABLE

 

8、RUNNABLE←→TIMED_WAITING

当前线程调用LockSupport.parkNanos(long nanos)或LockSupport.parkNanos(long mills)时,当前线程从RUNNABLE→TIMED_WAITING

调用LockSupport.unpark(目标线程)或调用了线程的interrupt(),或是等待超时,会让目标线程从TIMED_WAITING→RUNNABLE

 

9、RUNNABLE←→BLOCKED

t线程使用synchronized(obj)获取对象锁时如果竞争失败,从RUNNABLE→BLOCKED

持obj锁线程的同步代码块执行完毕,会唤醒该对象上所有处于BLOCKED状态下的线程重新竞争,如果t线程竞争成功,它会从BLOCKED→RUNNABLE,其他竞争失败的线程的状态仍然是BLOCKED

 

10、RUNNABLE←→TERMINATED

当前线程所有代码运行完毕,进入TERMINATED

 

图片、内容归纳整理来源:https://www.bilibili.com/video/BV16J411h7Rd?p=281

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值