java - Java类中的线程安全

标签 java thread-safety

为什么这个 java 类不是线程安全的。

class TestClass {  
   private int x;

   int get() {
       return x;
   }

   void set(int x) {
       this.x = x;
   }  
}

我读到需要关键字 synchronized 才能使其线程安全?毕竟操作不是在原子内部完成的吗?

最佳答案

虽然赋值本身是一个原子操作,但是由于硬件和编译器实现的不同,不同的线程可能会看到成员x的不同值。即,由于某种缓存,一个线程的修改可能对另一个线程不可见。这通常称为线程可见性问题

您可以通过在监视器上同步(使用 synchronized 关键字或 java.util.concurrent 锁)或通过将 x 声明为 volatile 来正确地同步您的代码。

关于java - Java类中的线程安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3602493/

相关文章:

java - 嵌入式 jetty - 503

Java - Selenium Firefox 驱动程序 - 无法点击模式中的特定按钮

java - 无法解析 grails 2.3.7 中的 :spring-securty-core:2. 0-RC2

c# - 线程安全的通用字段

ios - UIFont线程安全吗?

java - Spring Controller - 线程安全和存储资源

java - Spring 启动 : get command line argument within @Bean annotated method

Java:同步操作与波动性究竟有何关系?

java - 在线程之间共享变量时如何避免并发错误?

java - 从jsp传递值到struts2 Action 的问题