スレッドを実行していて、その中にtimer.schedule(task、5000)があるとします。ここで、タイマーが実行を開始し、スレッドのどこかにthread.sleep()があると仮定します。スレッドがまだスリープしている間に、5000ミリ秒が経過します。タイマーのタスクは、それが入っているスレッドがスリープしている間も実行されますか?
ありがとう
スレッドを実行していて、その中にtimer.schedule(task、5000)があるとします。ここで、タイマーが実行を開始し、スレッドのどこかにthread.sleep()があると仮定します。スレッドがまだスリープしている間に、5000ミリ秒が経過します。タイマーのタスクは、それが入っているスレッドがスリープしている間も実行されますか?
ありがとう
Thread.sleep()はスレッドのどこかに置くことはできず、タスクコードに含めることができるため、タスクの実行は5000ミリ秒間ブロックされてから、完了するまで実行されます。
java.util.Timerはシングルスレッドスケジューラであり、タスクの実行がブロックされている場合、Timerは他のスケジュールされたタスクを実行できないことに注意してください。APIを参照してください
各Timerオブジェクトに対応するのは、タイマーのすべてのタスクを順番に実行するために使用される単一のバックグラウンドスレッドです。タイマータスクはすぐに完了する必要があります。タイマータスクの完了に時間がかかりすぎると、タイマーのタスク実行スレッドが「占有」されます。これにより、後続のタスクの実行が遅れる可能性があります。これにより、問題のあるタスクが最終的に完了したときに(そしてその場合に)、「束ねられ」てすばやく連続して実行される可能性があります。