下面的代碼將工作,但我微微反感不必編寫,將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'。 –