Scheduledスレッド-schedule
schedule
1.scheduleメソッド
scheduleメソッドは、指定された時間後に、主に遅延またはタイミングを使用して実行されます.
2秒遅延後にタスクをコミットし、タスクの実行を開始します.
testScheduledMethodの結果は次のとおりです.
注:scheduleAtFixedRateは、指定したスレッド数のタスクのみを同時にスケジュールし、他のタスクの実行時間は遅延しますが、スケジュール遅延時間はタスクの実行開始時間に基づいて計算されます.
testFixScheduledMethodの実行結果は次のとおりです.
注:scheduleWithFixedDelayは、指定したスレッド数のタスクのみを同時にスケジュールし、他のタスクの実行時間は遅延しますが、スケジュール遅延時間はタスクの終了時間に基づいて計算されます.
testFixWithScheduledMethodは、次のように実行されます.
1.scheduleメソッド
scheduleメソッドは、指定された時間後に、主に遅延またはタイミングを使用して実行されます.
2秒遅延後にタスクをコミットし、タスクの実行を開始します.
package com.cweeyii.threadpool;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.*;
/**
* Created by wenyi on 16/10/16.
* Email:[email protected]
*/
public class ScheduledThreadPool {
private static final Logger LOGGER = LoggerFactory.getLogger(ScheduledThreadPool.class);
public static void main(String[] args) throws ExecutionException, InterruptedException {
testScheduledMethod();
testFixScheduledMethod();
testFixWithScheduledMethod();
}
private static void testScheduledMethod() throws ExecutionException, InterruptedException {
int poolSize = 2;
ScheduledExecutorService executorService = Executors.newScheduledThreadPool(poolSize);
List> futureList = new ArrayList<>();
for (int i = 0; i < poolSize * 2; i++) {
futureList.add(executorService.schedule(new CallableWorker(), 2, TimeUnit.SECONDS));
}
executorService.shutdown();
LOGGER.info(" ");
for (Future future : futureList) {
CallerHandle handle = future.get();
LOGGER.info(handle.getThreadName() + " ");
}
LOGGER.info(" ");
}
private static void testFixScheduledMethod() throws ExecutionException, InterruptedException {
int poolSize = 2;
ScheduledExecutorService executorService = Executors.newScheduledThreadPool(poolSize);
for (int i = 0; i < poolSize * 2; i++) {
executorService.scheduleAtFixedRate(new RunableWorker(), 0, 5, TimeUnit.SECONDS);
}
executorService.awaitTermination(10, TimeUnit.SECONDS);
executorService.shutdown();
LOGGER.info(" ");
LOGGER.info(" ");
}
private static void testFixWithScheduledMethod() throws ExecutionException, InterruptedException {
int poolSize = 2;
ScheduledExecutorService executorService = Executors.newScheduledThreadPool(poolSize);
for (int i = 0; i < poolSize * 2; i++) {
executorService.scheduleWithFixedDelay(new RunableWorker(), 0, 5, TimeUnit.SECONDS);
}
executorService.awaitTermination(10, TimeUnit.SECONDS);
executorService.shutdown();
LOGGER.info(" ");
LOGGER.info(" ");
}
}
testScheduledMethodの結果は次のとおりです.
22:04:41.017 INFO (ScheduledThreadPool.java:29) -
22:04:45.023 INFO (CallableWorker.java:20) - pool-1-thread-1
22:04:45.024 INFO (CallableWorker.java:20) - pool-1-thread-2
22:04:45.026 INFO (ScheduledThreadPool.java:32) - pool-1-thread-1
22:04:45.027 INFO (ScheduledThreadPool.java:32) - pool-1-thread-2
22:04:47.029 INFO (CallableWorker.java:20) - pool-1-thread-1
22:04:47.029 INFO (CallableWorker.java:20) - pool-1-thread-2
22:04:47.029 INFO (ScheduledThreadPool.java:32) - pool-1-thread-1
22:04:47.030 INFO (ScheduledThreadPool.java:32) - pool-1-thread-2
22:04:47.030 INFO (ScheduledThreadPool.java:34) -
注:scheduleAtFixedRateは、指定したスレッド数のタスクのみを同時にスケジュールし、他のタスクの実行時間は遅延しますが、スケジュール遅延時間はタスクの実行開始時間に基づいて計算されます.
testFixScheduledMethodの実行結果は次のとおりです.
22:46:37.313 INFO (RunableWorker.java:27) - pool-1-thread-2
22:46:37.313 INFO (RunableWorker.java:27) - pool-1-thread-1
22:46:39.318 INFO (RunableWorker.java:27) - pool-1-thread-2
22:46:39.324 INFO (RunableWorker.java:27) - pool-1-thread-1
22:46:42.316 INFO (RunableWorker.java:27) - pool-1-thread-2
22:46:42.316 INFO (RunableWorker.java:27) - pool-1-thread-1
22:46:44.321 INFO (RunableWorker.java:27) - pool-1-thread-1
22:46:44.321 INFO (RunableWorker.java:27) - pool-1-thread-2
22:46:45.311 INFO (ScheduledThreadPool.java:47) -
22:46:45.312 INFO (ScheduledThreadPool.java:48) -
22:46:47.314 INFO (RunableWorker.java:27) - pool-1-thread-1
注:scheduleWithFixedDelayは、指定したスレッド数のタスクのみを同時にスケジュールし、他のタスクの実行時間は遅延しますが、スケジュール遅延時間はタスクの終了時間に基づいて計算されます.
testFixWithScheduledMethodは、次のように実行されます.
22:49:50.897 INFO (RunableWorker.java:27) - pool-1-thread-1
22:49:50.897 INFO (RunableWorker.java:27) - pool-1-thread-2
22:49:52.906 INFO (RunableWorker.java:27) - pool-1-thread-1
22:49:52.906 INFO (RunableWorker.java:27) - pool-1-thread-2
22:49:57.907 INFO (RunableWorker.java:27) - pool-1-thread-1
22:49:57.907 INFO (RunableWorker.java:27) - pool-1-thread-2
22:49:58.895 INFO (ScheduledThreadPool.java:59) -
22:49:58.896 INFO (ScheduledThreadPool.java:60) -
22:49:59.911 INFO (RunableWorker.java:27) - pool-1-thread-2
22:49:59.911 INFO (RunableWorker.java:27) - pool-1-thread-1