线程blocked和waiting的区别

Blocked(阻塞)状态:

当线程尝试进入一个同步代码块或方法,但发现所需的锁对象已经被其他线程占用时,该线程会进入Blocked状态。

在Blocked状态下,线程被动地等待锁对象成为可用状态,它会一直在同步队列中等待,直到获得锁。

Blocked状态的线程可能会因为其他线程释放锁而自动唤醒,重新进入同步队列的竞争过程。

 

Waiting(等待)状态:

线程在执行过程中调用Object.wait()、Thread.sleep()、Thread.join()等方法,主动放弃CPU执行权和锁,进入Waiting状态。

在Waiting状态下,线程会释放CPU执行权并进入等待队列,直到其他线程调用notify()、notifyAll()或interrupt()等方法唤醒它。

Waiting状态的线程需要等待特定的方法来唤醒它,这种等待是条件性的,与Blocked状态的被动等待不同。

总结来说,Blocked状态是线程在竞争锁时失败后被动进入的状态,而Waiting状态是线程主动放弃执行权和锁,进入等待队列的状态。Waiting状态的线程需要被其他线程通过特定的方法唤醒,而Blocked状态的线程则可能因为锁的释放而自动唤醒。

 

ps:进入wait状态的线程被唤醒后,是接着上次执行的地方接着执行的。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值