gpt4 book ai didi

java 中断行为不稳定吗?

转载 作者:搜寻专家 更新时间:2023-10-31 19:45:31 25 4
gpt4 key购买 nike

如果一个线程中断另一个线程,中断状态是否会立即可见(即是否会出现可见性问题)?

最重要的是,我想知道您是否使用过打扰? Volatile boolean 标志似乎更可靠

最佳答案

java do interruptions act volatile?

根据对 javadoc 的阅读,我推断答案是肯定的。

  1. 如果中断状态没有“类似易变”的语义,则没有记录的方法来解决“发生在之前”的(假设的)需求。否则,您无法确定中断是否有效。但他们确实...

  2. 中断状态没有用内存读写来描述。因此,没有理由推断内存模型适用。

而且,事实证明,中断的行为JLS 17.2.3 中指定 .然后在JLS 17.4.4 , 中断在定义同步顺序时被特别提到:

"If thread T1 interrupts thread T2, the interrupt by T1 synchronizes-with any point where any other thread (including T2) determines that T2 has been interrupted (by having an InterruptedException thrown or by invoking Thread.interrupted or Thread.isInterrupted)."

底线 - “volatile like”行为是有保障的。


On top of that I am wondering do you ever use interruptions? A Volatile boolean flag seems way more reliable

当然可以。您关于中断不可靠的推断是基于(IMO)关于它们如何实现的不正确的心理模型。此外,对于在 sleepwait 调用等中阻塞的目标线程,中断具有特殊(且有用)的行为,等等。

中断的唯一重大缺点是它们是不分青红皂白的。任何线程都可以中断任何其他线程。相比之下,如果您使用的是 volatile boolean 值,则可以更好地控制哪些线程可以“中断”哪些线程(通过访问修饰符、使用共享对象等)。

关于java 中断行为不稳定吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28471837/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com