【问题标题】:notify() -> all of the threads in wait set must exitnotify() -> 等待集中的所有线程必须退出
【发布时间】:2018-12-27 14:57:46
【问题描述】:

17.2.4. Interactions of Waits, Notification, and Interruption

同样,通知不会因中断而丢失。假使,假设 一组线程 s 在对象 m 的等待集中,另一个 线程对 m 执行通知。然后:

a) s 中至少有一个线程必须从等待中正常返回,或者

b) s 中的所有线程必须通过 throw 退出等待 中断异常

这让我很吃惊,因为我知道notify() 只有wakes up a single thread 所以b) 不可能发生。 b) 选项在我看来完全没有意义,因为除了暗示notify() 的行为类似于notifyAll() 之外,它还应该中断所有等待的线程。

问:这一段有错吗?如果没有,那为什么不呢?

【问题讨论】:

    标签: java multithreading jls


    【解决方案1】:

    s 中的所有线程必须通过抛出 InterruptedException 退出等待

    这意味着所有等待s 的线程都被中断了。

    b) 表示如果所有线程都被中断,没有线程会因为被中断而正常从wait()唤醒。

    【讨论】:

    • 谢谢,但是你从哪里推断出所有线程都被中断的情况?
    • 虽然我对你的答案投了赞成票,因为有一些逻辑我仍然不相信是正确的。我的意思是我们在 另一个线程在 m 上执行通知 的上下文中,并且您声称应该同时在所有线程上发生中断,以便 b) 可以解释。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-29
    • 1970-01-01
    • 1970-01-01
    • 2021-11-03
    相关资源
    最近更新 更多