用notifyAll()的话,不是会造成数据出错么?

来源:4-4 Java线程交互之深入剖析互斥与同步

开眼看世界

2014-12-06 12:31

5482850d0001d00905000213.jpg


假设A、B线程的from都一样,energyBoxes[from]<amount导致A、B线程都wait()了。当满足energyBoxes[from] >= amount后某线程调用了notifyAll(),A、B线程都会继续运行,都对energyBoxes[from]进行操作,这样不是会导致数据出错么?

写回答 关注

2回答

  • Arthur
    2014-12-06 17:35:31

    唤醒后还是要竞争锁的,所以访问时还是互斥的。

  • 开眼看世界
    2014-12-06 13:04:27

    是我理解错了,notifyAll()后还是会逐个运行,不会一起向下运行造成数据出错。

    个人估计notifyAll()在遍历wait set中的线程进行逐个唤醒时,应该还会用synchronized(this)互斥,不知是不是?

深入浅出Java多线程

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

186088 学习 · 464 问题

查看课程

相似问题