Разрешенные оптимизации модели памяти Java для наивного петлителя - PullRequest
0 голосов
/ 15 октября 2018

Предположим, что у меня есть следующие классы

Looper.java

class Looper {
  boolean stop;

  void loop() {
    while(!stop) {
      // do something
    }
  }

  void stop() {
    stop = true;
  }
}

Launcher.java

class Launcher {
  public static void main(String[] args) {
    Looper looper = new Looper();
    new Thread(() -> looper.loop()).start();
    new Thread(() -> looper.stop()).start();
  }
}

Допустимо ли это для компилятора / JIT / CPUпреобразовать этот Looper класс следующим образом, чтобы цикл никогда не заканчивался?

class Looper {
  boolean stop;

  void loop() {
    while(true) { // as stop is always false from the the thread that enters this method
      // do something
    }
  }

  void stop() {
    stop = true;
  }
}
...