Thread.sleep против CountDownLatch.await с таймаутом - PullRequest
0 голосов
/ 23 октября 2019

Я знаю, что 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, я хочу знать об этом ио причинах.

Заранее спасибо.

...