为了暂停一个进程几秒钟,我在Runnable的run方法中添加了Thread.sleep
。以下是代码。
@PostConstruct
public void initScheduler() {
Runnable run = () -> {
while (true) {
try {
long productId = PRODUCT_ID_QUEUE.take();
//Thread.sleep(5L);
Thread.currentThread().sleep(5L);
try {
populateProductRatingsData(productId);
} catch (Exception e) {
LOG.error("Error while executing populateProductRatingsData with productId = " + productId, e);
}
} catch (Exception e) {
LOG.error("Error while queue#take for reviews", e);
}
}
};
Thread t = new Thread(run);
t.start();
}
然而,暂停没有发生,然后我切换到Thread.currentThread().sleep(5L)
,这也是无效的。所以,为了延迟我终于使用了
ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
executor.schedule(() -> populateProductRatingsData(productId), 5, TimeUnit.SECONDS);
解决了这个问题。
那么,为什么Thread.sleep
不起作用?或者错误在哪里?
由于
答案 0 :(得分:3)
如果您使用过Thread.sleep(5L);
,它只能睡5毫秒而不是秒。
所以尽管线程已经睡了,你可能还没有观察到睡眠。
答案 1 :(得分:1)
它可能实际上有效但Thread.sleep()
的论点单位是毫秒,因为您可以查看javadoc of Thread