Я знаю, что CountDownLatch используется для синхронизации обработки в нескольких потоках. Но мой вопрос об использовании CountDownLatch для чего-то, для чего он не используется: ожидание в течение некоторого времени, прежде чем продолжить выполнение инструкций в том же потоке.
//the countDown instance is not shared with any other thread
CountDownLatch countDown = new CountDownLatch(1);
try {
//here I just want to "sleep" for one second
countDown.await(1000, TimeUnit.MILLISECONDS);
} catch (InterruptedException ex) {
//handle exception
}
Очевидно, что ожидание вернется только через 1 секунду (никто не ведет обратный отсчет CountDownLatch). Я хочу знать, есть ли разница между использованием этого подхода и простым использованием Thread.sleep
, особенно в отношении использования ЦП.
Даже если экземпляр CountDownLatch не разделяется между потоками, приведенный выше фрагмент кода используется вконтекст, в котором этот код выполняется несколькими потоками (поэтому каждый со своим собственным CountDownLatch, который используется только для сна).
Мой коллега утверждает, что он более эффективен (ЦП)использовать countDownLatch.await (timeout), но я озадачен причинами. Если есть какая-либо причина (для любого конкретного контекста), где такое использование более эффективно, чем Thread.sleep
, я хочу знать об этом ио причинах.
Заранее спасибо.