1. ThreadPoolTaskExecutor学習
1.1はじめに
- 我々はすべての使用、一般的には、スレッド・プールを作成することを知っている
ThreadPoolExecutor
彼は、しかし、実際には、スレッドプールに春のパッケージ層を行っていますThreadPoolTaskExecutor
1.2コード例
- また、プロパティ値を設定し、最終的に呼び出すように設定して直接、個々のプロパティを作成するための非常に簡単な方法です
initialize()
方法は、実際にそれを行うために初期化されることは初期化することですThreadPoolExecutor
- これは、コールバック・リスナー・メソッドをカプセル化し
ListenableFutureCallback
、それを処理非同期コールバックとして使用することができます
/**
* @author laoliangliang
* @date 2019/10/10 10:10
*/
public class ExecutorDemo {
public static void main(String[] args) throws ExecutionException, InterruptedException {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(1);
executor.setMaxPoolSize(5);
executor.setQueueCapacity(1);
executor.setBeanName("mybean");
executor.setThreadNamePrefix("mytask-");
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.AbortPolicy());
executor.initialize();
List<FutureTask<String>> result = new ArrayList<>();
for (int i = 0; i < 5; i++) {
FutureTask<String> futureTask = new FutureTask<>(() -> {
System.out.println("hello world!");
Thread.sleep(200);
return "hello "+Thread.currentThread().getName();
});
executor.submit(futureTask);
result.add(futureTask);
}
for (FutureTask<String> futureTask : result) {
try {
System.out.println(futureTask.get());
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
}
ListenableFuture<?> runnable = executor.submitListenable(() -> {
Thread.sleep(1000);
System.out.println("runnable");
return "runnable result";
});
runnable.addCallback(new ListenableFutureCallback<Object>() {
@Override
public void onFailure(Throwable e) {
e.printStackTrace();
}
@Override
public void onSuccess(Object o) {
System.out.println("success "+o.toString());
}
});
System.out.println(runnable.get());
executor.shutdown();
}
}
結果
[INFO] ThreadPoolTaskExecutor - -Initializing ExecutorService 'mybean'
hello world!
hello world!
hello world!
hello world!
hello mytask-1
hello world!
hello mytask-1
hello mytask-2
hello mytask-3
hello mytask-4
runnable
runnable result
[INFO] ThreadPoolTaskExecutor - -Shutting down ExecutorService 'mybean'
success runnable result
1.3まとめ
- スレッドプールを使用する場合は、前に直接、プールスレッド春のパッケージを使用することを検討し
@Async
たコメントは、それを達成するために、スレッドプールを使用することです、私はあなたが非同期イベントを処理する必要がある場合は特に、これはより直感的かつ機能豊富なかもしれないと思います。