In diesem Artikel wird die Konfiguration des Spring -Threadpool -Threadpooltaskexecutors vorgestellt und teilt sie wie folgt mit Ihnen mit:
1. Threadpooltaskexecutor -Konfiguration
<!-Spring Thread Pool Executor-> <bean id = "taskexecutor"> <!-Minimale Anzahl von Threads, die vom Threadpool gepflegt werden-> <Eigenschaft name = "corepoolsize" value = "5" /> <! /> <!-Cache-Warteschlange-> <Eigenschaft name = "Queuecapacity" value = "20" /> <!-Handhabungsrichtlinie zur Ablehnung von Aufgaben-> <Eigenschaft name = "RejectsExecutionHandler"> <bean /> < /property> < /bean>
Attributfeldbeschreibung
CorepoolSize: Die minimale Anzahl der vom Threadpool verwalteten Threads
KeepaliveSeconds: Freizeit erlaubt
MaxpoolSize: Die maximale Anzahl der mit dem Threadpool verwalteten Threads
Queuekapazität: Cache -Warteschlange
RejectedExecutionHandler: Handling Strategie zur Ablehnung der Aufgabe
2. Ausführen von Methodenausführungsprozess (ablaufbar)
Wenn die Anzahl der Thread -Pools zu diesem Zeitpunkt geringer ist als Corepoolsize, auch wenn die Fäden im Thread -Pool alle untätig sind, muss ein neuer Thread erstellt werden, um die zusätzlichen Aufgaben zu verarbeiten.
Wenn die Zahl im Thread -Pool gleich der Corepoolsize ist, die Pufferwarteschlange jedoch nicht voll ist, wird die Aufgabe in der Pufferwarteschlange platziert.
Wenn die Anzahl der Thread -Pools zu diesem Zeitpunkt größer ist als CorePoolsize, ist die Pufferwarteschlange WorkQueue voll und die Anzahl der Thread -Pools weniger als maxpoolsize, erstellen Sie einen neuen Thread, um die zusätzlichen Aufgaben zu erledigen.
Wenn die Zahl im Thread -Pool zu diesem Zeitpunkt größer ist als Corepoolsize, ist die Pufferwarteschlange WorkQueue voll und die Zahl im Thread -Pool gleich Maxpoolsize, diese Aufgabe wird durch die vom Handler angegebene Richtlinie übernommen. Das heißt, die Priorität der Handhabungsaufgaben lautet: Core Thread Corepoolsize, Task -Warteschlange WorkQueue, maximaler Thread Maximumpoolsize. Wenn alle drei voll sind, verwenden Sie den Handler, um die abgelehnte Aufgabe zu erledigen.
Wenn die Anzahl der Threads im Thread -Pool größer ist als Corepoolsize, wird der Faden beendet, wenn ein Faden mehr als Keepalivetime im Leerlauf ist. Auf diese Weise kann der Fadenpool die Anzahl der Fäden im Pool dynamisch einstellen.
3. Beispielcode
JUNIT -Test
@Runwith (SpringJunit4ClassRunner.class) @ContextConfiguration (classes = {multitHeadConfig.class}) öffentliche Klasse MultitHeadTest {@autowired private threadpooltaskexecutor taskexecutor; @Autowired Private MultithreadProcessService MultithreadProcessService; @Test public void test () {int n = 20; für (int i = 0; i <n; i ++) {taskexecutor.eexecute (neuer MultitHeheaddemo (MultithreadProcessService)); System.out.println ("int i ist" + i + ", jetzt threadpool aktive threads totalnum" + taskexecutor.getActiveCount ()); } try {System.in.read (); } catch (ioException e) {werfen neu runTimeException (e); }}}Multithreaddemo
/** * Multithread Concurrent Processing Demo * @Author Daniel.zhao * */public class multithreaddemo implementiert runnable {private MultithreadProcessService MultitHhreadProcessService; public multithreaddemo () {} public multithreadDemo (MultithreadProcessService multithreadProcessService) {this.multitHhreadProcessService = multithreadProcessService; } @Override public void run () {multithreadProcessService.ProcessSomething (); }}MultithreadProcessService
@ServicePublic Class MultitHReadProcessService {public static Final Logger logger = logger.getLogger (MultitHhreadProcessService.class); / ** * Der Standardverarbeitungsprozess dauert 1000 ms */ public void processometing () {logger.debug ("MultitHhreadProcessService-processssomething" + Thread.currentThread () + "...... start"); try {thread.sleep (1000); } catch (InterruptedException e) {neue runTimeException (e) werfen; } logger.debug ("MultitHhreadProcessService-processSomething" + Thread.currentThread () + "...... End"); }}Multithreadconfig
@Configuration @Componentscan (Basepackages = {"com.xxx.multithread"}) @ImporTresource (value = {"classPath: config/application-task.xml"}) @enablScheduling Public Class MultitHreadConfig {{}Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.