21.3.1 TimerManagerを使用したスレッドのスケジューリング方式
TimerManagerを使用したスレッドのスケジューリングには,次の二つの方式があります。
-
1回だけ処理を実行する
-
一定の間隔で処理を繰り返し実行する
それぞれのスケジューリング方式の概要を次に示します。
- 〈この項の構成〉
(1) 1回だけ処理を実行する
指定した時間に,1回だけ処理を実行する方式です。処理が実行されると,TimerManagerは破棄されます。
(2) 一定の間隔で処理を繰り返し実行する
一定の間隔で処理を繰り返し実行するには,次の二つの方法があります。
-
fixed-rate(処理を開始する間隔を指定して繰り返し実行する)
-
fixed-delay(処理の終了から次の処理の開始までの間隔を指定して繰り返し実行する)
スケジューリングされた処理は,TimerManagerを停止するか,対応するTimerのcancelメソッドが実行されるまで,処理を実行し続けます。
それぞれの方法の概要を次に示します。
- fixed-rate(処理を開始する間隔を指定して繰り返し実行する)
-
一定の間隔で処理を繰り返し開始していく方式です。fixed-rateでは,次の内容を指定します。
- 最初の処理を開始するタイミング
-
次のどちらかの方法で指定します。
-
開始時刻を指定する場合
scheduleAtFixedRateメソッドの引数であるfirstTimeをDate型で指定します。
-
アプリケーションを開始してから処理を実行するまでの経過時間を指定する場合
scheduleAtFixedRateメソッドの引数であるdelayをlong型で指定します。単位はミリ秒です。
-
- 前の処理を開始してから次の処理を開始するまでの間隔
-
scheduleAtFixedRateメソッドの引数であるperiodをlong型で指定します。単位はミリ秒です。
fixed-rateの処理のイメージを次の図に示します。この図では,アプリケーションの開始から最初の処理を開始するまでの時間を2秒,前の処理を開始してから次の処理を開始するまでの時間を3秒としています。
図21‒3 fixed-rateの処理のイメージ fixed-rateの処理では,前に実行された処理時間がperiodに指定した時間より長かった場合,前に実行された処理が終わった直後に次の処理が開始されます。この図では,3回目の処理時間がperiodで指定した時間である3秒より長かったため,3回目の処理が終わった直後に4回目の処理が開始されています。
- fixed-delay(処理の終了から次の処理の開始までの間隔を指定して繰り返し実行する)
-
前の処理が終了してから,一定の間隔を置いて処理を繰り返し開始していく方式です。fixed-delayでは,次の内容を指定します。
- 最初の処理を開始するタイミング
-
次のどちらかの方法で指定します。
-
開始時刻を指定する場合
scheduleメソッドの引数であるfirstTimeをDate型で指定します。
-
アプリケーションを開始してから処理を実行するまでの経過時間を指定する場合
scheduleメソッドの引数であるdelayをlong型で指定します。単位はミリ秒です。
-
- 前の処理が終了してから次の処理を開始するまでの間隔
-
scheduleメソッドの引数であるperiodをlong型で指定します。単位はミリ秒です。
fixed-delayの処理のイメージを次の図に示します。この図では,アプリケーションの開始から最初の処理を開始するまでの時間,および前の処理が終了してから次の処理を開始するまでの時間を2秒としています。
図21‒4 fixed-delayの処理のイメージ