首页 > 解决方案 > Thread.sleep vs CountDownLatch.await 超时

问题描述

我知道 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,尤其是在 CPU 使用率方面。

即使 CountDownLatch 实例不在线程之间共享,上面的代码片段也会在多个线程运行此代码的上下文中使用(因此,每个线程都有自己的 CountDownLatch,仅用于睡眠目的)。

我的一位同事说使用 countDownLatch.await(timeout) 效率更高(CPU),但我对原因感到困惑。如果有任何原因(对于任何特定上下文)这种用法比 更有效Thread.sleep,我想知道它和原因。

提前致谢。

标签: javasleepcountdownlatch

解决方案


推荐阅读