我想让我的帖子等待30分钟。这样做有什么问题吗?
答案 0 :(得分:31)
你可以让你的线程像这样睡30分钟:
Thread.sleep(30 * // minutes to sleep
60 * // seconds to a minute
1000); // milliseconds to a second
使用Thread.sleep
本身并不是坏事。简单地说,它只是告诉线程调度程序抢占线程。如果使用不当,Thread.sleep
会很糟糕。
sleep
来实际解决竞争条件。但这不是一种保证方式。使用互斥锁。请参阅Is there a Mutex in Java? 作为保证计时器:无法保证Thread.sleep
的睡眠时间。它可能会以InterruptedException
过早返回。或者它可能睡过头了。
public static void sleep(long millis) throws InterruptedException
使当前正在执行的线程休眠(暂时停止执行)指定的毫秒数, 受制于系统计时器和调度程序的精度和准确性 。
您也可以使用,kozla13在评论中显示:
TimeUnit.MINUTES.sleep(30);
答案 1 :(得分:4)
Krumia的答案已经完美地展示了如何睡觉跑步Thread
。有时,睡眠或暂停线程的要求源于希望在以后执行操作。如果是这种情况,您应该更好地使用更高级别的概念,例如Timer
或ScheduledExecutorService
:
ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
executor.schedule(operation, 30, TimeUnit.MINUTES);
operation
是您希望在30分钟内执行的Runnable
。
使用ScheduledExecutorService
,您还可以定期执行操作:
// start in 10 minutes to run the operation every 30 minutes
executor.scheduleAtFixedDelay(operation, 10, 30, TimeUnit.MINUTES);