РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1008 of 1163 menu

Метод onSpinWait

Метод onSpinWait класса Thread является статическим и не принимает параметров. Он вызывается внутри цикла ожидания, чтобы дать подсказку процессору о том, что текущий поток выполняет «холостое» вращение (spin), а не полезные вычисления. Это может повысить производительность и снизить энергопотребление в многопоточных программах, где поток ожидает изменения состояния без блокировки.

Синтаксис

Thread.onSpinWait()

Пример

Давайте создадим поток, который в цикле ожидает изменения флага, и используем onSpinWait для оптимизации ожидания:

public class Main { private static volatile boolean flag = false; public static void main(String[] args) throws InterruptedException { Thread worker = new Thread(() -> { while (!flag) { Thread.onSpinWait(); } System.out.println("Flag changed!"); }); worker.start(); Thread.sleep(100); flag = true; worker.join(); } }

Результат выполнения кода:

"Flag changed!"

Пример

Давайте сравним два потока: один использует onSpinWait, а другой просто выполняет пустой цикл. Оба ждут счётчик:

public class Main { private static volatile int counter = 0; public static void main(String[] args) throws InterruptedException { Thread spinner = new Thread(() -> { while (counter < 1000000) { Thread.onSpinWait(); } System.out.println("Spinner finished"); }); Thread busy = new Thread(() -> { while (counter < 1000000) { // busy wait without hint } System.out.println("Busy finished"); }); spinner.start(); busy.start(); for (int i = 0; i < 1000000; i++) { counter = i + 1; } spinner.join(); busy.join(); System.out.println("Done"); } }

Результат выполнения кода (порядок вывода может меняться):

"Spinner finished" "Busy finished" "Done"

Смотрите также

  • метод yield,
    который уступает процессор другому потоку
  • метод sleep,
    который приостанавливает поток на заданное время
  • класс AtomicInteger,
    который обеспечивает атомарные операции над целыми числами
  • метод Thread,
    который представляет поток выполнения в Java
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить