为了账号安全,请及时绑定邮箱和手机立即绑定

关于WaitSet 问题

如果energyBox[from] < amount 成立,那么当前线程会一直运行 lockObj.wait(),这样岂不是当前线程一直在运行着,无法结束了,一直耗着CPU资源?

正在回答

2 回答

既然理解成线程会阻塞,不会执行。当其他线程NotifyAll的时候,如果他获取资源,又会发生阻塞。那么这个线程会一直运行下去,不会消亡?(while条件一直成立)

0 回复 有任何疑惑可以回复我~
#1

海与千巷

NorifyAll之前已经发生过一次能量转移了,如果恰好之前那个被阻塞的线程是获得能量的一方,那么这个线程再次获得资源的时候有可能就不会发生阻塞了
2016-09-18 回复 有任何疑惑可以回复我~

在线程中调用了wait()方法后,线程就会进入阻塞,让出cpu资源来给其他线程运行了。你可以理解为Object的wait()和Thread的sleep()方法一样,只不过前者会先释放那个锁,而后者不会。

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
深入浅出Java多线程
  • 参与学习       186084    人
  • 解答问题       464    个

带你一起深入浅出多线程,掌握基础,展望进阶路线

进入课程

关于WaitSet 问题

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信