java 中断行为是否不稳定?
java do interruptions act volatile?
如果一个线程中断另一个线程,中断状态是否会立即可见(即是否存在可见性问题)?
最重要的是,我想知道您是否使用过中断?易失性布尔标志似乎更可靠
java do interruptions act volatile?
根据对 javadoc 的阅读,我推断答案是肯定的。
如果中断状态没有 "volatile like" 语义,则没有记录的方法来解决 "happens before" 的(假设的)需求。否则,您无法确定中断是否有效。但他们确实...
中断状态没有用内存读写来描述。因此,没有理由推断内存模型适用。
而且,事实证明,中断的行为在JLS 17.2.3. Then in 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)关于它们如何实现的不正确的心理模型。此外,对于在 sleep
或 wait
调用等中阻塞的目标线程,中断具有特殊(且有用)的行为。
中断的唯一显着缺点是它们是不分青红皂白的。任何线程都可以中断任何其他线程。相比之下,如果您使用的是 volatile 布尔值,则可以更好地控制哪些线程可以 "interrupt" 哪些其他线程(通过访问修饰符、使用共享对象等)。
如果一个线程中断另一个线程,中断状态是否会立即可见(即是否存在可见性问题)?
最重要的是,我想知道您是否使用过中断?易失性布尔标志似乎更可靠
java do interruptions act volatile?
根据对 javadoc 的阅读,我推断答案是肯定的。
如果中断状态没有 "volatile like" 语义,则没有记录的方法来解决 "happens before" 的(假设的)需求。否则,您无法确定中断是否有效。但他们确实...
中断状态没有用内存读写来描述。因此,没有理由推断内存模型适用。
而且,事实证明,中断的行为在JLS 17.2.3. Then in 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)关于它们如何实现的不正确的心理模型。此外,对于在 sleep
或 wait
调用等中阻塞的目标线程,中断具有特殊(且有用)的行为。
中断的唯一显着缺点是它们是不分青红皂白的。任何线程都可以中断任何其他线程。相比之下,如果您使用的是 volatile 布尔值,则可以更好地控制哪些线程可以 "interrupt" 哪些其他线程(通过访问修饰符、使用共享对象等)。