为什么不能将 `atomic` 和 `synchronized` 属性应用于同一个方法

Why can't `atomic` and `synchronized` attributes be applied to the same method

在 Java 中,线程是该语言的基本主题之一。与此主题相关的两个常用属性是 atomicsynchronized,它们用于不同的目的。据我了解,atomic 方法必须完整执行,而 synchronized 方法在与该方法一起使用的对象上放置一个 "lock",以防止其他线程导致内存错误或干扰。我的问题是为什么不能在同一个方法声明中使用 atomicsynchronized 属性。

链接的文章描述了导致全有或全无更改的不同操作类别。没有 atomic 关键字,也没有将方法指定为 atomic 的概念。

担心同步块上的某些内容是否以原子方式执行是没有意义的,因为同步应该提供足够的保证来排除其他线程并使更改跨线程可见;如果在更改时没有其他线程可以访问对象,则更改是否是原子的并不重要。

您可以将原子变量与同步方法或块结合起来。假设您想公开一个在同步方法中递增的计数器,以便其他线程可以在不获取锁的情况下获取其当前值。为计数器使用 AtomicInteger 会更新它的值并使其可见,即使当前线程仍在执行同步方法时也是如此。