volatile이 아니며 다른 스레드에 의해 변경되기를 기다리는 필드의 값에서 스핀하는 while 루프를 보고합니다.

그러한 루프는 루프 내에서 조금만 작업이 수행돼도 CPU 사용량이 크게 늘어날 뿐만 아니라 의도와 다른 의미를 가지게 될 가능성이 높습니다. Java 메모리 모델에서는 다른 스레드가 필드 값을 변경하는 경우에도 해당 루프가 완료되지 않습니다.

예:


  class SpinsOnField {
      boolean ready = false;

      void run() {
          // 다른 스레드에서 markAsReady를 호출한 다음에도
          // 루프가 완료되지 않을 수 있습니다
          while (!ready) {
          }
          // 무언가 작업을 실행합니다
      }

      void markAsReady() {
          ready = true;
      }
  }

또한 Java 9부터는 일부 하드웨어의 성능을 크게 끌어올릴 수 있도록 volatile 필드의 스핀 루프 내에서 Thread.onSpinWait()를 호출하는 것이 좋습니다.

이 검사 보고서가 빈 while 루프만을 가지도록 하려면 아래 체크박스를 사용하세요.