java - 同步块(synchronized block) - Java

标签 java multithreading mutex

我意识到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/

相关文章:

java - 有没有一种快速识别 String 或 TextView 中的 HTML ASCII 代码的方法?

java - 无法找到 activemq.xml 的 Spring NamespaceHandler

java - 如何同时(或关闭时间)启动两个线程

c++ - Boost::threads 在调试中工作,在发布时不工作

synchronization - 信号量的共识数是多少?

c - 多个进程,一个互斥锁

Java 从操纵杆(如 Xbox Controller )获取输入,无需使用外部 api

java - 在 @Configuration bean 的 SpEL 表达式中引用 ConfigurationProperties Beans

C++类成员变量用线程初始化

windows - Mutex 是否调用系统调用?