【发布时间】:2012-06-06 05:26:31
【问题描述】:
如标题。我已经使用同步来保护多线程写入。但我想知道是否需要添加 volatile 来保护读取。 (正如我们所知,我也可以使用同步来保护读取,但它会阻止读取和写入一致。更重要的是,如果我使用可重入锁。它也会阻止。)
private volatile BigDecimal cacheMiss = BigDecimal.ZERO;
public BigDecimal getCacheHit() {
return cacheHit;
}
public void increaseCacheMiss() {
synchronized (cacheMissLock) {
this.cacheMiss = this.cacheMiss.add(STEP);
}
}
【问题讨论】:
-
如果您不希望跟踪超过 20 亿次缓存命中,您可以使用 Java 5 的
AtomicLong而无需自己进行任何同步。
标签: java multithreading volatile synchronized