Warum erstellt ScheduledExecutorService Threads nicht wie benötigt?

8

In meiner Anwendung verwende ich ScheduledExecutorService, aber nur ein Thread wird erzeugt, um die geplanten Aufgaben zu behandeln. Liegt das daran, dass ScheduledExecutorService keine Threads erzeugt, um die ausstehenden Aufgaben zu behandeln?

Hier ist ein Code-Snippet, das nur "run () 1" anstatt der erwarteten "run () 1" ausgibt, gefolgt von "run () 2" ... "run () 10."

%Vor%     
Michael 26.07.2012, 21:03
quelle

2 Antworten

9

Es gibt nur einen Thread, weil Sie den Threadpool mit Executors.newScheduledThreadPool(1) erstellen, was bedeutet, dass der Threadpool nur einen Thread enthält. Wenn Sie 10 Threads haben wollen, übergeben Sie 10 als Argument. Beachten Sie, dass die Dokumentation von ScheduledThreadPoolExecutor , was diese Methode ist Gibt explizit an, dass der Thread-Pool eine feste Größe hat.

    
JB Nizet 26.07.2012, 21:22
quelle
3

Aus dem Javadoc für ScheduledThreadPoolExecutor :

  

Während diese Klasse von ThreadPoolExecutor erbt, werden einige der   Vererbte Optimierungsmethoden sind dafür nicht geeignet. Insbesondere weil   Es agiert als Pool fester Größe mit corePoolSize-Threads und einem   unbegrenzte Warteschlange, Anpassungen an maximumPoolSize haben keinen nützlichen Effekt.   Außerdem ist es fast nie eine gute Idee, corePoolSize auf zu setzen   Null oder verwenden Sie allowCoreThreadTimeOut, da dies den Pool verlassen kann   ohne Threads, um Aufgaben zu bearbeiten, sobald sie zum Ausführen berechtigt sind.

Mit anderen Worten maximumPoolSize == corePoolSize . Du hast corePoolSize auf 1 gesetzt, also wird es nur spawnen.

    
Jim Garrison 26.07.2012 21:20
quelle

Tags und Links