場合によっては、プロジェクトで複数のタスクを実行するために異なるスレッドプールを割り当てる必要があります。したがって、異なるスレッドプールを監視することにより、異なるタスクが制御されます。これを達成するには、プロジェクトでマルチスレッドプールを構成する必要があります。
Spring Bootは、シンプルで効率的なスレッドプールの構成と使用ソリューションを提供します。
構成
まず、春の管理に引き渡されるスレッドプール豆を構成します。
@configurationPublic class taskexecutepool {@bean(name = "threadpoola")publicpooltaskexecutormytaskasyncpool(){threadpooltaskexecutor = new SthreadPooltasKexecutor(); executor.setCorepoolsize(4); executor.setmaxpoolsize(8); executor.setqueuecapacity(100); executor.setKeepaliveseConds(60); executor.setThreadNamePrefix( "Pool-A"); executor.setRejectedExecutionHandler(new ThreadPoolexecutor.CallerrunSpolicy()); executor.Initialize();執行者を返す; } @bean(name = "threadpoolb")public threadpooltaskexecutorasyncpoolb(){threadpooltaskexecutor executor = new SthreadPooltasKexecutor(); executor.setCorepoolsize(2); executor.setmaxpoolsize(4); executor.setqueuecapacity(8); executor.setKeepaliveseConds(60); executor.setThreadNamePrefix( "Pool-B"); //タスクの数がMaxPoolsizeとQueeCapacityを超えるときに使用されるポリシー。このポリシーは、タスクのスレッドを呼び出してexecutor.setRejectedExecutionHandler(new SthreadPoolexecutor.callerrunSpolicy())を実行することです。 executor.Initialize();執行者を返す; }}使用
スレッドを使用するには、実行方法での注釈のみが必要であり、メソッドのクラスは豆として定義され、管理するために春まで引き渡される必要があります。
クラスでAnnotations @Component、@Serviceなどを使用できます
@async(value = "threadpoola")public void taska(){...}アクティブなスレッドの数を確認してください:
@Autowiredプライベートスレッドプールプールタスケックスセクタースレッドプール; //変数名は、定義されたスレッドプールビーン名の名前です。 public void checkavtivethreadnum(){int num = threadpoola.getactivecount();}もちろん他の方法があるので、ここでは例を挙げません。
スレッドプールの各属性の理解:
corepoolsize:スレッドプールコアスレッドを表し、通常の状況で開くスレッドの数を表します。
QueueCapacity:コアスレッドがタスクを実行している場合、ここに保存される追加のタスクがまだあります。
maxpoolsize:QueueCapacityがいっぱいの場合、スレッドの数がmaxpoolsizeに達するまでより多くのスレッドが開始されます。まだタスクがある場合、拒否ポリシーに従って処理されます。
多くの拒否戦略があります:
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。