采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
在线程状态上面描述阻塞(Blocked):等待获取排它锁,但是图片上面写的是阻塞(doesn’t release any lock or monitor),且第二幅图显示进入阻塞执行的是sleep,而Thread.sleep只会让出CPU,不会导致锁行为的改变,请问具体以哪个为准?
同学好,图的界定比较模糊,synchronized会导致线程进入Blocked状态,Object.wait()导致线程进入Waiting状态,Waiting线程被其他线程调用Object.notify()唤醒之后,重新获取对象上的锁的时候也会进入Blocked状态或者runnable状态,而blocked则是等待后去排它锁,并不会导致它释放锁。
上面说的synchronized也会进入blocked状态,图里没有体现,图里将限期等待和阻塞放在了一起统一变成阻塞了,调用sleep会进入限期等待,具体可以看看源码的注释,因此以第一个为准,带来误解深感歉意:)
/**
* Thread state for a waiting thread with a specified waiting time.
* A thread is in the timed waiting state due to calling one of
* the following methods with a specified positive waiting time:
* <ul>
* <li>{@link #sleep Thread.sleep}</li>
* <li>{@link Object#wait(long) Object.wait} with timeout</li>
* <li>{@link #join(long) Thread.join} with timeout</li>
* <li>{@link LockSupport#parkNanos LockSupport.parkNanos}</li>
* <li>{@link LockSupport#parkUntil LockSupport.parkUntil}</li>
* </ul>
*/
TIMED_WAITING,
非常感谢!
登录后可查看更多问答,登录/注册
招聘季即将到来,让百度资深面试官来为你的高薪Offer保驾护航
1.9k 27
2.8k 22
1.3k 15
1.5k 14
1.4k 14
购课补贴联系客服咨询优惠详情
慕课网APP您的移动学习伙伴
扫描二维码关注慕课网微信公众号