我意识到Java中提供的同步块(synchronized block)基本上是一个可重入互斥量的实现。然而同步块(synchronized block)是原子的吗?
那么如何为当前在同步块(synchronized block)中执行的线程处理中断 - 它是否只是通过恢复到目前为止所做的所有更改来释放锁?
编辑:关于问题的中断部分——它在 Java 中通常是如何处理的。例如,我看到许多 Java 代码示例,其中开发人员在(比如说)线程处于等待队列中时捕获中断。然而,在 catch block 中,它们所做的只是打印已引发中断。我更好奇那个线程到底发生了什么?是否从等待队列中移除?
最佳答案
-- 原子性
同步块(synchronized block)有助于实现原子性——但不能保证它们的数据操作是原子的。为了使同步块(synchronized block)中的内容成为原子,您经常使用像 getter 和 setter 这样的原子数据结构,例如 AtomicBoolean。
最新的 Java 版本支持大量原子类,例如原子 int 数组。
-- 如何处理中断:
中断未由同步显式处理 - 同步块(synchronized block)仅保证在执行时,该 block 不能由另一个线程重新进入。
关于java - 同步块(synchronized block) - Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7669418/