この質問は、2つのブログ投稿( http://dow.ngra.de/2008/10/27/when-systemcurrenttimemillis-is-too-slow/、http://dow.ngra.de/2008/10)で議論されています。 / 28 / what-do-we-really-know-about-non-blocking-concurrency-in-java /)、しかし私はまだ決定的な答えを聞いていません。これを行うスレッドが1つある場合:
public class HeartBeatThread extends Thread {
public static int counter = 0;
public static volatile int cacheFlush = 0;
public HeartBeatThread() {
setDaemon(true);
}
static {
new HeartBeatThread().start();
}
public void run() {
while (true) {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
counter++;
cacheFlush++;
}
}
}
そして、以下を実行する多くのクライアント:
if (counter == HeartBeatThread.counter) return;
counter = HeartBeatThread.cacheFlush;
スレッドセーフかどうか?