[英]Integer assignment in multi-threaded environment java
读取和写入操作以引用变量和原始变量在java中是原子的。
说我有以下课程:
public class Example{
private int k;
public void setK(int k){
this.k = k;
}
}
据我所知,它是一个线程安全的,因为整数赋值是原子的。 可见性呢? 当一个线程更新k时,它意味着其他thead会看到更新的值吗?
谢谢你的推荐
它既不是线程安全的,也不是从一个线程到另一个线程建立可见性。 它不是线程安全的,因为this.k = k;
是一个读写操作。 为了建立后者,您可以将变量声明为volatile
。 在这种情况下,您还可以使用AtomicInteger
。
据我所知,这是一个线程安全,因为......
如果你已经向我们展示了整个Example
类,那么它绝对是线程安全的。 您的类是线程安全的,因为它没有公开可见的状态。
如果来自多个线程的重叠方法调用无法将类或其任何实例置于错误状态,则类是“线程安全的”。 您的Example
类无法进入错误状态,因为它不会发布任何状态:该类只有一个方法, e.setK(int)
,但该方法对客户端代码可以看到的任何内容都没有影响。
另一方面,如果你只向我们展示了Example
类的一部分,那么任何人都无法说出该类是否是线程安全的。 我们必须看到班上的其他人。 除了k
之外还有其他领域吗? 他们之间有什么关系? 有哪些方法的行为取决于k
的值? 你们班级的API合同对于一个实例如何针对不同的k
值表现出什么样的承诺呢?
没有这些信息,我们甚至无法开始讨论线程安全问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.