重新理解线程状态转换

重新理解线程状态转换文章目录重新理解线程状态转换1.线程状态转换2.不同过程分析情况1:NEW-->RUNNABLE情况2:RUNNABLE<-->WAITING情况3:RUNNABLE<-->WAITING情况4:RUNNABLE<-->WAITING情况5:RUNNABLE<-->TIMED_WAITING情况6:RUNNABLE<-->TIMED_WAITING情况7:RUNNABLE<-->TIMED_WAITING情况
摘要由CSDN通过智能技术生成

重新理解线程状态转换

1.线程状态转换

在这里插入图片描述

2.不同过程分析

情况1:NEW–>RUNNABLE

创建线程对象时,线程t的状态是NEW
当调用t.start()时,线程状态由NEW-->RUNNABLE

情况2:RUNNABLE<–>WAITING

t线程调用synchronized(obj)后,
调用 obj.wait()时,t线程从RUNNABLE-->WAITING
调用 obj.notify()obj.notifyAll()t.interrupt()时:

  • 如果竞争成功,t线程从WAITING-->RUNNABLE
  • 如果竞争失败,t线程从WAITING-->BLOCKED(进入阻塞队列EntryList),等待调度器。

情况3:RUNNABLE<–>WAITING

当前线程调用t.join()后,当前线程从RUNNABLE-->WAITING
注意:当前线程在t线程对象的监视器上等待
t线程结束,或者调用了当前线程的interrupt()时,当前线程从WAITING-->RUNNABLE

情况4:RUNNABLE<–>WAITING

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

情况5:RUNNABLE<–>TIMED_WAITING

t线程调用synchronized(obj)获取了对象锁后:
调用了obj.wait(long n)后,t线程从RUNNABLE-->TIMED-WAITING
t线程等待了n毫秒后,或者调用了obj.notify()obj.notifyAll()t.interrupt()时:

  • 如果竞争成功,t线程从TIMED_WAITING-->RUNNABLE
  • 如果竞争失败,t线程从TIMED_WAITING-->BLOCKED(进入阻塞队列EntryList),等待调度器。

情况6:RUNNABLE<–>TIMED_WAITING

当前线程调用t.join(long n),当前线程从RUNNABLE<-->TIMED_WAITING

  • 注意:当前线程在t线程的监视器上等待。
    当前线程等待了n毫秒或者t线程结束,或者调用了当前线程的interrupt()时,当前线程从TIMED_WAITING-->RUNNABLE

情况7:RUNNABLE<–>TIMED_WAITING

当前线程调用了Threads.sleep(long n); 当前线程从RUNNABLE-->TIMED_WAITING
当前线程等待时间超过了n毫秒,当前线程从TIMED_WAITING-->RUNNABLE

情况8:RUNNABLE<–>TIMED_WAITING

当前线程调用 LockSupport.parkNanos(long nanos)LockSupport.parkUntil(long millis)时,当前线程从 RUNNABLE --> TIMED_WAITING
调用LockSupport.unpark(目标线程)或调用了线程 的 interrupt(),或是等待超时,会让目标线程从TIMED_WAITING--> RUNNABLE

情况9:RUNNABLE<–>BLOCKED (与RUNNABLE<–>WAITING区别!)

t 线程用 synchronized(obj)获取了对象锁时如果竞争失败,从 RUNNABLE --> BLOCKED
持 obj 锁线程的同步代码块执行完毕,会唤醒该对象上所有 BLOCKED 的线程重新竞争,如果其中t 线程竞争成功,从BLOCKED --> RUNNABLE,其它失败的线程仍然 BLOCKED

情况10:RUNNABLE <–> TERMINATED

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值