【发布时间】:2019-11-24 18:28:38
【问题描述】:
我想编写一个线程安全的方法 sum() 但我不确定是否可以使用两个 AtomicInteger 来确保安全,还是必须使用同步块?
class A {
private AtomicInteger a = new AtomicInteger();
private AtomicInteger b = new AtomicInteger();
public void sum(int c) {
a.set(a.get() + b.get() + c);
}
}
【问题讨论】:
-
您问它是否“线程安全”,但“线程安全”对您意味着什么?变量
a、b和c之间是否存在特殊关系?是否可以通过另一个线程的操作来更改它们中的任何一个?如果您相加的a和c是另一个线程执行其操作之前的值,但b的值是 after其他线程做了它的事?线程安全主要是关于保留程序中不同共享变量之间的重要关系,只有程序的作者才能说出它们是什么。
标签: java multithreading synchronized atomicinteger