线程状态与阻塞

线程的状态

1.NEW:初始状态。
线程被创建。
2.RUNNABLE:运行状态。
java的运行状态(RUNNABLE)状态包括操作系统中的就绪(READY)和运行中(RUNNING)两种状态。
Thread.start会使线程进入Runnable状态。
yield会使线程从RUNNING状态进入READY状态。
3.BLOCKED:阻塞状态。
表示线程等待获取监视器锁,线程阻塞于锁。
当线程调用同步方法时,在没有获取到锁的情况下,线程将会进入到阻塞状态。线程等待进入synchronized方法/代码块。
BLOCKED状态的线程获取到锁,就从BLOCKED状态变为RUNNABLE状态。
4.WAITING:等待状态。
当前线程需要等待其他线程通知或中断才能继续执行。
Object.wait/Thread.join/LockSupport.park会使线程进入Waiting状态。
notify/notifyAll/unpark唤醒线程进入Runnable状态。
5.TIME_WAITING:超时等待状态。
Thread.sleep(long)/Object.wait(long)/Thread.join(long)/LockSupport.parkNanos/LockSupport.parkUntil会使线程进入TIME_WAITING状态。
超时时间到了/notify/notifyAll/unpark,线程进入Runnable状态。
6.TERMINATED:终止状态。线程执行完毕。

引用自《Java并发编程的艺术》

不同种类的阻塞(广义)

阻塞在synchronized关键字的线程状态是BLOCKED。BLOCKED状态是狭义的阻塞。
阻塞在Object.wait/Thread.join/LockSupport.park/JUC包中Lock接口的线程状态是WAITING
阻塞在Thread.sleep(long)/Object.wait(long)/Thread.join(long)/LockSupport.parkNanos/LockSupport.parkUntil的线程状态是TIME_WAITING
阻塞在IO操作的线程状态是RUNNING(属于RUNNABLE)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值