ScheduledThreadPoolExecutor
これは、タスクの並列実行を実現できる を使用して行うことができます。タスクをスケジュールするための小さなサンプル例:
//creates a thread pool of size 2
int poolSize = 2;
// creates ScheduledThreadPoolExecutor object with number of thread 2
ScheduledThreadPoolExecutor exec = new ScheduledThreadPoolExecutor(poolSize);
//starts executing after 1 second
ScheduledFuture<Callable-Type> sf = stpe.schedule(new TaskOne(), 1,TimeUnit.SECONDS);
//starts executing after 2 seconds
ScheduledFuture<Callable-Type> sf1 = stpe.schedule(new TaskTwo(), 2,TimeUnit.SECONDS);
また、以下のようにタスクを定義できます。
class TaskOne implements Callable<Callable-Type> {
@Override
public Callable-Type call() throws Exception {
//DO YOUR WORK HERE
return callable-type;
}
}
class TaskTwo implements Callable<Callable-Type> {
@Override
public Callable-Type call() throws Exception {
//DO YOUR WORK HERE
return callable-type;
}
}
ScheduledThreadPoolExecutor
overを使用する利点は次のTimer
とおりです。
- タイマーは、タイマー タスクを実行するためのスレッドを 1 つだけ作成します。スケジュールされたスレッド プールは、延期された定期的なタスクを実行するための複数のスレッドを提供できるようにすることで、この制限に対処します。
- Timer のもう 1 つの問題は、TimerTask がチェックされていない例外をスローすると、動作が低下することです。タイマー スレッドは例外をキャッチしないため、TimerTask からスローされた未チェックの例外によってタイマー スレッドが終了します。
参照:実際の Java 並行性