ThreadPoolTaskExecutor学習

1. ThreadPoolTask​​Executor学習

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たコメントは、それを達成するために、スレッドプールを使用することです、私はあなたが非同期イベントを処理する必要がある場合は特に、これはより直感的かつ機能豊富なかもしれないと思います。

おすすめ

転載: www.cnblogs.com/sky-chen/p/11654903.html