下面的代码将工作,但我微微反感不必编写,将isRunning()方法:我可以同步读取控制变量吗?
class Test {
private boolean running;
public void startX() {
synchronized(this) {
running = true
}
while (isRunning()) {
//do something
}
}
public synchronized void stopX() {
running = false;
}
private synchronized boolean isRunning() {
return running;
}
}
我可以同步在一些其他的方式,在while (running){}
的running
变量的读取,还是我写的isRunning()方法?同样的问题也适用于其他控制变量为好,如
for (;running;) {}
或
if (running) {}
在所有这些情况下,它好像你被迫写一个毫无意义的方法来获得同步正确。我错过了什么吗?
只是让''running' volatile'。 –