Cet article présente la configuration du filetage de filetage à ressort ThreadpoolTaskexecutor et le partage avec vous, comme suit:
1. Configuration de threadpooltaskexecutor
<! - Exécuteur de la piscine de thread de printemps -> <bean id = "taskexecutor"> <! - Nombre minimum de threads entretenus par le pool de threads -> <propriété name = "corepoolSize" value = "5" /> <! - Temps inlassable autorisé -> <propriété name = "keepalivesecondS" value = "200" /> <! Value = "10" /> <! - Cache Queue -> <propriété name = "queueCapacity" value = "20" /> <! - Gestion de la politique pour rejeter les tâches -> <propriété name = "rejectEDExecutionHandler"> </> </ propriété> </ bean>
Description du champ d'attribut
CorePoolSize: le nombre minimum de threads maintenus par le pool de threads
keepalivesecondes: temps libre autorisé
MaxPoolSize: le nombre maximum de threads maintenus par pool de threads
Qureuecapacité: file d'attente de cache
RejectEdExecutionHandler: Gestion de la stratégie pour rejeter la tâche
2. Exécuter le processus d'exécution de la méthode (exécutable)
Si le nombre de pools de threads est inférieur à CorePoolSize à ce moment, même si les threads du pool de threads sont tous inactifs, un nouveau fil doit être créé pour gérer les tâches ajoutées.
Si le nombre dans le pool de threads est égal à CorePoolSize, mais que la file d'attente de tampon WorkQueue n'est pas pleine, la tâche est placée dans la file d'attente de tampon.
Si le nombre de pools de threads est supérieur à CorePoolSize à ce moment, la file d'attente de tampon WorkQueue est pleine et le nombre de pools de threads est inférieur à MaxpoolSize, créez un nouveau fil pour gérer les tâches ajoutées.
Si le nombre dans le pool de threads est supérieur à CorePoolSize pour le moment, la file d'attente de tampon WorkQueue est pleine et le nombre dans le pool de threads est égal à MaxPoolSize, cette tâche est gérée via la politique spécifiée par le gestionnaire. Autrement dit, la priorité de la gestion des tâches est: Core Thread CorePoolSize, Task Fitre WorkQueue, Maximum Thread MaximumpoolSize. Si les trois sont pleins, utilisez le gestionnaire pour gérer la tâche rejetée.
Lorsque le nombre de threads dans le pool de threads est supérieur à CorePoolSize, si un thread est inactif pour plus que KeepaliveTime, le fil sera terminé. De cette façon, le pool de threads peut ajuster dynamiquement le nombre de threads dans la piscine.
3. Exemple de code
Test junit
@Runwith (SpringJunit4ClassRunner.class) @ContextConfiguration (Classes = {MultithreadConfig.class}) Public Class MultithreadTest {@autowired private ThreadpoolTaskexecutor taskexecutor; @Autowired private multithreadProcessService multithreadProcessService; @Test public void test () {int n = 20; for (int i = 0; i <n; i ++) {taskexecutor.execute (new MultithReadDemo (multithreadProcessService)); System.out.println ("int i is" + i + ", maintenant Threadpool actif threads totalnum est" + taskexecutor.getAntiveCount ()); } essayez {system.in.read (); } catch (ioException e) {lancer une nouvelle RuntimeException (e); }}}Multithreaddemo
/ ** * Multithread Traitement simultané Demo * @author daniel.zhao * * / classe publique MultithreadDemo implémente Runnable {private MultithreadProcesseService MultithreadProcesseSservice; public multithreadDemo () {} public multithreaddemo (multithreadProcessService multithreadProcessService) {this.MultithreadProcessService = mulThreadProcessService; } @Override public void run () {multithreadProcessService.ProcessSomething (); }}MultithreadprocessService
@ServicePublic class MultithreadProcessService {public static final logger Logger = logger.getLogger (multithreadProcessService.class); / ** * Le processus de traitement par défaut prend 1000 ms * / public void processoMething () {logger.debug ("MultithreadProcessService-ProcessSomething" + thread.currentThread () + "...... start"); essayez {thread.sleep (1000); } catch (InterruptedException e) {Throw New RuntimeException (e); } logger.debug ("MultithreadProcessService-ProcessSomething" + Thread.currentThread () + "...... end"); }}Multithreadconfig
@Configuration @ComponentScan (basepackages = {"com.xxx.multithread"}) @importResource (value = {"classpath: config / application-task.xml"}) @enablescheduling public class multithreadconfig {}Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.