使线程进入睡眠状态 30 分钟
2022-09-01 22:01:24
我想让我的线程等待30分钟。这样做有什么问题吗?
你可以让你的线程休眠30分钟,如下所示:
Thread.sleep(30 * // minutes to sleep
60 * // seconds to a minute
1000); // milliseconds to a second
使用 Thread.sleep
本身并不是坏事。简单地说,它只是告诉线程调度程序抢占线程。 当它被错误地使用时是坏的。Thread.sleep
sleep
作为保证定时器:睡眠时间不保证。它可能会过早地返回一个 .或者它可能会睡过头。Thread.sleep
InterruptedException
从文档中:
public static void sleep(long millis) throws InterruptedException
使当前正在执行的线程在指定的毫秒数内休眠(暂时停止执行),具体取决于系统计时器和调度程序的精度和准确性。
您也可以使用,正如kozla13在他们的评论中所示:
TimeUnit.MINUTES.sleep(30);
Krumia的答案已经完美地展示了如何睡觉跑步 。有时,线程休眠或暂停的要求源于以后执行操作的愿望。如果是这种情况,您最好使用更高层次的概念,如 或 :Thread
Timer
ScheduledExecutorService
ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
executor.schedule(operation, 30, TimeUnit.MINUTES);
您希望在 30 分钟内执行的位置。operation
Runnable
使用 ,您还可以定期执行操作:ScheduledExecutorService
// start in 10 minutes to run the operation every 30 minutes
executor.scheduleAtFixedDelay(operation, 10, 30, TimeUnit.MINUTES);