💡 Java: не используй `Thread.sleep()` для ожидания работы
Thread.sleep() - это просто пауза на заданное время.
Проблема в том, что ты угадываешь:
❌ поток может проснуться слишком рано
❌ или наоборот, ждать дольше, чем нужно
❌ polling через sleep() создаёт лишние задержки и проверки
Для координации потоков лучше использовать:
✅ wait() / notify()
✅ CountDownLatch
✅ другие примитивы синхронизации из java.util.concurrent
Например:
CountDownLatch done = new CountDownLatch(1);
done.await(); // ждём сигнал
done.countDown(); // работа завершена
А если задача должна выполняться периодически, вместо бесконечного цикла с sleep() лучше взять
ScheduledExecutorService exec =
Executors.newSingleThreadScheduledExecutor();
exec.scheduleAtFixedRate(
this::doWork,
0,
1,
TimeUnit.SECONDS
);
Thread.sleep() хорошо подходит для простой задержки.
Для ожидания события и периодических задач в Java есть более точные инструменты.
#Java #Concurrency
Thread.sleep() - это просто пауза на заданное время.
Проблема в том, что ты угадываешь:
❌ поток может проснуться слишком рано
❌ или наоборот, ждать дольше, чем нужно
❌ polling через sleep() создаёт лишние задержки и проверки
Для координации потоков лучше использовать:
✅ wait() / notify()
✅ CountDownLatch
✅ другие примитивы синхронизации из java.util.concurrent
Например:
CountDownLatch done = new CountDownLatch(1);
done.await(); // ждём сигнал
done.countDown(); // работа завершена
А если задача должна выполняться периодически, вместо бесконечного цикла с sleep() лучше взять
ScheduledExecutorService exec =
Executors.newSingleThreadScheduledExecutor();
exec.scheduleAtFixedRate(
this::doWork,
0,
1,
TimeUnit.SECONDS
);
Thread.sleep() хорошо подходит для простой задержки.
Для ожидания события и периодических задач в Java есть более точные инструменты.
#Java #Concurrency