【发布时间】:2014-07-16 11:52:08
【问题描述】:
假设我有一个实例变量,并且我有 setter 和 getter。
代码 1:
Class<T> {
volatile T value;
public synchronized void set(T v) {
if(value==null) {
value=v;
}
}
public T get() {
return value;
}
}
代码 2:
Class<T> {
static volatile T value;
public synchronized void set(T v) {
if(value==null) {
value=v;
}
}
public T get() {
return value;
}
}
我有两个问题
1) 静态易失状态字段和只有易失状态字段有什么区别?
2) 刚了解了 volatile 读/写的 release/acquire 概念,明白了 getter 不需要同步(因为缓存刷新)。但是 setter 需要同步吗?
【问题讨论】:
-
第一个问题的答案与多线程无关 - 静态变量是静态变量。变量是否为 volatile 无关紧要。
-
@assylias 不,考虑一下:
class X implements Runnable { private static Object o; public void run() { o = new Object(); }}。在这种情况下,变量是否为静态很重要。 -
@Absurd-Mind 我没有说static没有用,我只是说
static关键字的含义对于非易失性和易失性变量是一样的。 -
@assylias:谢谢你的回复,很有道理。
标签: java multithreading static volatile