报告在非 volatile 字段值上自旋,等待它被另一个线程更改的 while 循环。

除了在循环内完成少量工作时可能会非常耗费 CPU 资源外, 这样的循环很可能具有与预期不同的语义。 即便另一个线程改变了该字段的值, Java 内存模型也允许这样的循环永不完成。

示例


  class SpinsOnField {
      boolean ready = false;

      void run() {
          // the loop may never complete even after
          // markAsReady call from the other thread
          while (!ready) {
          }
          // do some work
      }

      void markAsReady() {
          ready = true;
      }
  }

此外,自 Java 9 起,建议在 volatile 字段的自旋循环中调用 Thread.onSpinWait(),这可能会显著提高某些硬件上的性能。

要让此检查仅报告空的 while 循环,请使用下面的复选框。