【发布时间】:2015-08-12 12:45:19
【问题描述】:
下面的代码可以运行,但我有点讨厌编写 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) {}
在所有这些情况下,您似乎不得不编写一个毫无意义的方法来获得正确的同步。我错过了什么吗?
【问题讨论】:
-
只需要
runningvolatile。
标签: java multithreading for-loop while-loop synchronized