多线程第二讲

一、线程的 6 种状态


就像生物从出生到长大、最终死亡的过程一样,线程也有自己的生命周期,在 Java 中线程的生命周期中一共有 6 种状态。

1.New(新创建)
2.Runnable(可运行)
3.Blocked(被阻塞)
4.Waiting(等待)
5.Timed Waiting(计时等待)
6.Terminated(被终止)
如果想要确定线程当前的状态,可以通过 getState() 方法,并且线程在任何时刻只可能处于 1 种状态。

如图所示

 

 需要注意的是 

       Java 中的 Runable 状态对应操作系统线程状态中的两种状态,分别是 Running 和 Ready,也就是说,Java 中处于 Runnable 状态的线程有可能正在执行,也有可能没有正在执行,正在等待被分配 CPU 资源。所以,如果一个正在运行的线程是 Runnable 状态,当它运行到任务的一半时,执行该线程的 CPU 被调度去做其他事情,导致该线程暂时不运行,它的状态依然不变,还是 Runnable,因为它有可能随时被调度回来继续执行任务。

     当线程调用notify()和notifyAll()方法时,被唤醒的线程并不是立马进入Runnable状态而是进入Blocked状态 应为唤醒线程的线程正在持有monitor锁只有当其释放掉所占有的锁时,其他线程获取的锁才会回到Runnable状态。还有wait()/notify()/notifyAll()方法被调用时 要求必须在synchronized代码块中,原因是执行方法时需要先持有monitor锁。调用完wait()方法后会释放所持有的monitor锁

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值