public class VolatileTest {
private static final Logger LOGGER = Logger.getLogger(VolatileTest.class.getName());
private static int MY_INT = 0;
public static void main(String[] args) {
new ChangeListener().start();
new ChangeMaker().start();
}
static class ChangeListener extends Thread {
@Override
public void run() {
int local_value = MY_INT;
while ( local_value < 5){
if( local_value!= MY_INT){
LOGGER.log(Level.INFO,"Got Change for MY_INT : {0}", MY_INT);
local_value= MY_INT;
}
}
}
}
static class ChangeMaker extends Thread{
@Override
public void run() {
int local_value = MY_INT;
while (MY_INT <5){
LOGGER.log(Level.INFO, "Incrementing MY_INT to {0}", local_value+1);
MY_INT = ++local_value;
try {
Thread.sleep(500);
} catch (InterruptedException e) { e.printStackTrace(); }
}
}
}
}
все дело в сценариях использования ключевых слов volatile в java?
если я прокомментирую некоторую часть кода выше, ключевое слово volatile не работает, комментируя этот код.
тогда изменчивое ключевое слово не работает.потому что нет Thread.sleep ()?Кто-нибудь может дать объяснение этого кода ??