Busy waiting, также известный как busy-looping или spinning, — это техника многопоточности, где процесс постоянно проверяет, выполнено ли условие без передачи управления другим потокам.
Поток непрерывно опрашивает условие в цикле. Например, процесс может постоянно проверять, доступен ли ввод с клавиатуры или прошёл ли определённый промежуток времени.
Busy waiting считается анти-паттерном, потому что:
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
long timeToStop = System.currentTimeMillis() + 1000;
long currentTime = System.currentTimeMillis();
// Busy waiting - постоянный опрос
while (timeToStop > currentTime) {
currentTime = System.currentTimeMillis();
}
}
});
Вместо busy waiting используй нормальные механизмы синхронизации:
wait() и notify()CountDownLatch или CyclicBarrierThread.sleep() с нужными интерваламиЭти альтернативы позволяют потокам приостановить выполнение и возобновить его только когда условие реально выполнится, что значительно повышает производительность системы и эффективность использования ресурсов.
Busy waiting заставляет поток постоянно проверять условие в цикле без передачи управления, что впустую тратит циклы CPU, которые могли бы использоваться другими потоками.
Новый — ещё не проверен сообществом
Вы