关于wait()和notify()用法

来源:4-3 Java线程交互之互斥与同步:守恒的能量

土牛

2016-04-07 13:10

  1. 当使用了wait()方法后,线程停止等待,那wait后面的语句还会被执行吗?如果没有被执行,那notify();也没被执行,那怎么通知其他线程呢?

  2. 为什么不能把notify()放进while循环里面?放在外面不就是代表条件不满足不执行wait(),也要执行notify()?

写回答 关注

3回答

  • 土牛
    2016-05-02 16:11:13

    我得到最后的答案是因为每次都执行一次notify;所以即使他wait()了释放了锁,由于他上一次执行了 notify()了,所以就已经叫醒了另外的线程,注意这个notify和wait()不是在同一次过程中的。

  • 慕斯0471166
    2016-05-01 02:50:24

    你想的是一条线程,而现在是多条线程,也就是说很多线程都依次执行这段代码

  • 慕后端2198842
    2016-04-07 17:24:39

    你这逻辑。。。。。  我理解的是这样的  当前线程调用的wait()线程就处于阻塞状态,后面的语句当然不会执行,并且,线程调用wait()之后是会释放掉锁资源,然后自己才进入小黑屋等待的,所以并不影响后面线程访问关键数据;

    while 的作用是将满足while条件的线程关进小黑屋啊。。。所以    只有在不满足while的情况下,线程得以成功读写完关键数据,然后才会调用notidy()唤醒小黑屋里的其他等待的线程

深入浅出Java多线程

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

186088 学习 · 464 问题

查看课程

相似问题