春ブートカスタム・スレッド・プール

  • スレッドプール春ブーツメインクラスを定義する、など:
@SpringBootApplication
public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } @EnableAsync @Configuration class TaskPoolConfig { @Bean("taskExecutor") public Executor taskExecutor() { ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); executor.setCorePoolSize(10); executor.setMaxPoolSize(20); executor.setQueueCapacity(200); executor.setKeepAliveSeconds(60); executor.setThreadNamePrefix("taskExecutor-"); executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); executor.setWaitForTasksToCompleteOnShutdown(true); executor.setAwaitTerminationSeconds(60); return executor; } } } 

我々以上によりThreadPoolTaskExecutor、スレッド・プールを作成し、次のパラメータを設定します。

  • カーネルスレッドの10数:スレッド数は、スレッドプールを初期化するために作成しました
  • スレッドの最大数20:スレッドプール内のスレッドの最大数、バッファキューが一杯になった後にのみ、それはより多くのスレッドコア・スレッドの数より適用されます
  • バッファキュー200:タスクキューバッファを実行します
  • 60秒のスレッドアイドル時間を許可する:コアスレッド外スレッドの数よりも多く、それは到着のアイドル時間後に破壊されます
  • スレッドプールのプレフィックス名:私たちは簡単に処理タスクを設定した後、スレッドプールを見つけることができます
  • スレッドプール戦略がタスクを拒否:ここで使用するCallerRunsPolicyスレッドプールは、電源を処理していない戦略を、直接になる政策executeタスクを実行するには、呼び出し元のスレッド方式を拒否し、executorがシャットダウンされていない限り、それは破棄されますタスク
  • 設定された他のビーンの破壊を継続するすべてのタスクの完了を待っている間に、スレッドプールが閉じられています
  • この時間以上ではなく、ライブのブロッキング、アプリケーションが最終的に閉じることができることを確実にするためには、破壊の破壊を強制しない場合は、待ち時間のスレッドプールのタスクを設定します
スレッドプールを使用します
  • あなただけがする必要が@Async注釈にスレッド・プール名を指定します
@Slf4j
@Component
public class Task { public static Random random = new Random(); @Async("taskExecutor") public void doTaskOne() throws Exception { log.info("开始做任务一"); long start = System.currentTimeMillis(); Thread.sleep(random.nextInt(10000)); long end = System.currentTimeMillis(); log.info("完成任务一,耗时:" + (end - start) + "毫秒"); } @Async("taskExecutor") public void doTaskTwo() throws Exception { log.info("开始做任务二"); long start = System.currentTimeMillis(); Thread.sleep(random.nextInt(10000)); long end = System.currentTimeMillis(); log.info("完成任务二,耗时:" + (end - start) + "毫秒"); } @Async("taskExecutor") public void doTaskThree() throws Exception { log.info("开始做任务三"); long start = System.currentTimeMillis(); Thread.sleep(random.nextInt(10000)); long end = System.currentTimeMillis(); log.info("完成任务三,耗时:" + (end - start) + "毫秒"); } } 
  • テスト
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest public class ApplicationTests { @Autowired private Task task; @Test public void test() throws Exception { task.doTaskOne(); task.doTaskTwo(); task.doTaskThree(); Thread.currentThread().join(); } }


著者:Dear_diary
リンクします。https://www.jianshu.com/p/a13ac0d774c6
出典:ジェーンの本は
、著者が著作権を保有しています。著者は認可商業転載してください接触、非商用の転載は、ソースを明記してください。

おすすめ

転載: www.cnblogs.com/zeenzhou/p/12664154.html