土牛
2016-04-07 13:10
当使用了wait()方法后,线程停止等待,那wait后面的语句还会被执行吗?如果没有被执行,那notify();也没被执行,那怎么通知其他线程呢?
为什么不能把notify()放进while循环里面?放在外面不就是代表条件不满足不执行wait(),也要执行notify()?
我得到最后的答案是因为每次都执行一次notify;所以即使他wait()了释放了锁,由于他上一次执行了 notify()了,所以就已经叫醒了另外的线程,注意这个notify和wait()不是在同一次过程中的。
你想的是一条线程,而现在是多条线程,也就是说很多线程都依次执行这段代码
你这逻辑。。。。。 我理解的是这样的 当前线程调用的wait()线程就处于阻塞状态,后面的语句当然不会执行,并且,线程调用wait()之后是会释放掉锁资源,然后自己才进入小黑屋等待的,所以并不影响后面线程访问关键数据;
while 的作用是将满足while条件的线程关进小黑屋啊。。。所以 只有在不满足while的情况下,线程得以成功读写完关键数据,然后才会调用notidy()唤醒小黑屋里的其他等待的线程
深入浅出Java多线程
186088 学习 · 464 问题
相似问题