java为什么打印时会从主内存获取值?
给出以下代码。当我取消对print语句的注释时,使用者从主存读取值(并检测到更改)。 当我对它进行评论时,没有检测到任何变化(当然,这两种假设都是非易失性的)
为什么?编译器在本例中决定不使用缓存是个好主意,这只是“随机”的吗
public class Counter {
private /*volatile*/ int val;
public int getVal() {
return val;
}
public synchronized void increment() {
this.val++;
}
}
public class Producer extends Thread {
private final Counter counter;
public Producer(Counter counter) {
this.counter = counter;
}
@Override
public void run() {
while (counter.getVal() < 5) {
counter.increment();
System.out.println("Producer: incrementing count to " + counter.getVal());
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
return;
}
}
System.out.println("Producer: terminating");
}
}
public class Consumer extends Thread {
private final Counter counter;
public Consumer(Counter counter) {
this.counter = counter;
}
@Override
public void run() {
int localValue = -1;
while (true) {
// System.out.println("I see: " + counter.getVal());
if (localValue != counter.getVal()) {
System.out.println("Consumer: detected count change " + counter.getVal());
localValue = counter.getVal();
}
if (counter.getVal() >= 5) {
break;
}
}
System.out.println("Consumer: terminating");
}
}
共 (0) 个答案