Когда стирается память стека потоков? - PullRequest
0 голосов
/ 08 февраля 2019
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 ()?Кто-нибудь может дать объяснение этого кода ??

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...