有什么理由在这段代码中同时使用 volatile 和 synchronized 吗?
public class Helper {
private volatile int n;
private final Object lock = new Object();
public Helper(int n) {
this.n = n;
}
public void setN(int value) {
synchronized (lock) {
n = value;
}
}
}
类助手必须是线程安全的。我从“Java Concurrency Guidelines”一书中得到了这个例子,但仍然不清楚:在这个例子中同时使用 volatile 和 synchronized 的原因是什么?