スレッドを30分間待つようにします。これを行うのに問題はありますか?
次のように、スレッドを30分間スリープさせることができます。
Thread.sleep(30 * // minutes to sleep
60 * // seconds to a minute
1000); // milliseconds to a second
Thread.sleep
を使用することは本質的に悪いことではありません。簡単に説明すると、スレッドスケジューラにスレッドをプリエンプトするように指示するだけです。 Thread.sleep
は、誤って使用された場合は不適切です。
sleep
を導入することにより、競合状態を実際に解決できる場合があります。しかし、これは保証された方法ではありません。ミューテックスを使用します。 Javaにミューテックスはありますか? を参照してください保証タイマーとして:Thread.sleep
のスリープ時間は保証されません。 InterruptedException
を使用して、途中で戻る可能性があります。または、寝坊する可能性があります。
ドキュメント から:
public static void sleep(long millis) throws InterruptedException
現在実行中のスレッドを指定されたミリ秒数だけスリープ(一時的に実行を停止)させますシステムタイマーとスケジューラーの精度と精度に従います。
kozla1 がコメントに示しているように、使用することもできます。
TimeUnit.MINUTES.sleep(30);
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);