public class ThreadSafe {
private int aField;
public synchronized void setAField(int value) {
aField = value;
}
public synchronized int getAField() {
return aField;
}
}
public class ThreadSafeToo {
private volatile int aField;
public synchronized void setAField(int value) {
aField = value;
}
public int getAField() {
return aField;
}
}
public class DontKnowIfThreadSafeButMostLikelyYes {
private static int aField;
public synchronized void setAField(int value) {
aField = value;
}
public int getAField() {
return aField;
}
}
Run Code Online (Sandbox Code Playgroud)
问题:
DontKnowIfThreadSafeButMostLikely是否是线程安全的?
什么是首选的成语,为什么?
ThreadSafeToo 不需要同步方法:volatile赋值是原子的,并提供可见性保证.
DontKnowIfThreadSafeButMostLikelyYes 不是线程安全的:您需要同步对共享变量的读取和写入.
首选成语是主观的,但在您的情况下,有效的方法是:
public class ThreadSafeToo {
private volatile int aField;
public void setAField(int value) { aField = value; }
public int getAField() { return aField; }
}
Run Code Online (Sandbox Code Playgroud)