Heim  >  Artikel  >  Java  >  Was bedeuten Java-Thread-Pool-Parameter?

Was bedeuten Java-Thread-Pool-Parameter?

PHPz
PHPznach vorne
2023-05-06 09:22:141059Durchsuche

Thread-Pool-Technologie wird häufig in der Java-Multithread-Entwicklung verwendet. Dieser Artikel enthält eine detaillierte Erläuterung der sieben Parameter beim Erstellen eines Java-Thread-Pools.

Was bedeuten Java-Thread-Pool-Parameter?

Wie aus dem Quellcode ersichtlich ist, verfügt der Konstruktor des Thread-Pools über 7 Parameter.

Diese 7 Parameter sind:

  • corePoolSize: die Anzahl der Kernthreads.

  • maximumPoolSize: Maximale Anzahl von Threads.

  • keepAliveTime: Überlebenszeit des Leerlauf-Threads.

  • TimeUnit: Zeiteinheit.

  • BlockingQueue: Thread-Pool-Aufgabenwarteschlange.

  • ThreadFactory: Factory zum Erstellen von Threads.

  • RejectedExecutionHandler: Ablehnungsstrategie.

Diese 7 Parameter werden im Folgenden einzeln erklärt.

1. corePoolSize Thread-Pool-Kern-Thread-Größe

Der Thread-Pool behält eine Mindestanzahl von Threads bei. Auch wenn diese Threads den Leerlaufstatus verarbeiten, werden sie nicht zerstört, es sei denn, „allowCoreThreadTimeOut“ ist festgelegt. Die Mindestanzahl an Threads beträgt hier corePoolSize.

2. MaximumPoolSize Die maximale Anzahl von Threads im Thread-Pool

Nachdem eine Aufgabe an den Thread-Pool übermittelt wurde, wird zunächst festgestellt, ob noch inaktive Threads vorhanden sind. Wenn ja, wird die Aufgabe direkt übergeben Wenn dies nicht der Fall ist, wird es in der Arbeitswarteschlange zwischengespeichert. Wenn die Arbeitswarteschlange voll ist, wird ein neuer Thread erstellt und dann eine Aufgabe aus der Arbeitswarteschlange entfernt Kopf der Arbeitswarteschlange und zur Verarbeitung an den neuen Thread übergeben, und die neu übermittelte Aufgabe wird am Ende der Arbeitswarteschlange platziert. Der Thread-Pool erstellt keine unbegrenzten Threads. Die maximale Anzahl von Threads ist durch MaximumPoolSize begrenzt.

3. keepAliveTime-Thread-Überlebenszeit im Leerlauf

Wenn ein Thread inaktiv ist und die aktuelle Anzahl der Threads größer als corePoolSize ist, wird der inaktive Thread nach der angegebenen Zeit zerstört. Die hier angegebene Zeit wird durch keepAliveTime festgelegt

4 . Einheit Leerlauf-Thread-Überlebenszeiteinheit

Die Maßeinheit von keepAliveTime

5. workQueue-Arbeitswarteschlange

Nachdem eine neue Aufgabe übermittelt wurde, wird sie zuerst in diese Arbeitswarteschlange eingegeben und dann während der Aufgabenplanung aus der Warteschlange entfernt . In JDK werden vier Arten von Arbeitswarteschlangen bereitgestellt:

①ArrayBlockingQueue

Array-basierte begrenzte Blockierungswarteschlange, sortiert nach FIFO. Nachdem eine neue Aufgabe eingegangen ist, wird sie am Ende der Warteschlange platziert. Das begrenzte Array kann Probleme mit der Ressourcenerschöpfung verhindern. Wenn die Anzahl der Threads im Thread-Pool corePoolSize erreicht und eine neue Aufgabe eingeht, wird die Aufgabe am Ende der Warteschlange platziert und wartet auf die Planung. Wenn die Warteschlange bereits voll ist, wird ein neuer Thread erstellt. Wenn die Anzahl der Threads maxPoolSize erreicht hat, wird die Ablehnungsrichtlinie ausgeführt.

②LinkedBlockingQuene

Unbegrenzte Blockierungswarteschlange basierend auf einer verknüpften Liste (tatsächlich ist die maximale Kapazität Interger.MAX), sortiert nach FIFO. Aufgrund der annähernd unbegrenzten Natur der Warteschlange werden neue Aufgaben in der Warteschlange gespeichert, ohne dass neue Threads erstellt werden, wenn maxPoolSize verwendet wird. Wenn diese Arbeitswarteschlange verwendet wird, ist der Parameter maxPoolSize Tatsächlich funktioniert nicht.

③SynchronousQuene

Eine blockierende Warteschlange, die keine Aufgaben zwischenspeichert. Der Produzent stellt eine Aufgabe ein und muss warten, bis der Verbraucher die Aufgabe herausnimmt. Das heißt, wenn eine neue Aufgabe eingeht, wird sie nicht zwischengespeichert, sondern direkt zur Ausführung der Aufgabe eingeplant. Wenn keine Threads verfügbar sind, wird ein neuer Thread erstellt. Es wird eine Ablehnungsrichtlinie ausgeführt.

④PriorityBlockingQueue

Eine unbegrenzte Blockierungswarteschlange mit Priorität. Die Priorität wird über den Parameter Comparator implementiert.

6. threadFactory-Thread-Factory

Die Factory, die beim Erstellen eines neuen Threads verwendet wird, kann zum Festlegen des Thread-Namens, ob es sich um einen Daemon-Thread usw. handelt, verwendet werden.

7. Handler-Ablehnungsrichtlinie

Wenn die Aufgaben im Die Arbeitswarteschlange hat das maximale Limit erreicht, und die Anzahl der Threads im Thread-Pool hat ebenfalls das maximale Limit erreicht. Wenn zu diesem Zeitpunkt eine neue Aufgabe eingereicht wird, wie wird damit umgegangen? Die Ablehnungsrichtlinie hier soll dieses Problem lösen:

①CallerRunsPolicy

Unter dieser Richtlinie wird die Ausführungsmethode der abgelehnten Aufgabe direkt im Aufrufer-Thread ausgeführt, es sei denn, der Thread-Pool wurde heruntergefahren Aufgabe direkt bearbeiten.

Was bedeuten Java-Thread-Pool-Parameter?

②AbortPolicy

Unter dieser Richtlinie wird die Aufgabe direkt verworfen und eine RejectedExecutionException ausgelöst.

Was bedeuten Java-Thread-Pool-Parameter?

③DiscardPolicy

Unter dieser Richtlinie wird die Aufgabe direkt verworfen und es wird nichts unternommen.

Was bedeuten Java-Thread-Pool-Parameter?

④DiscardOldestPolicy

Unter dieser Richtlinie verwerfen Sie die früheste Aufgabe, die in die Warteschlange gelangt, und versuchen Sie dann, die abgelehnte Aufgabe in die Warteschlange zu stellen

Was bedeuten Java-Thread-Pool-Parameter?

Das obige ist der detaillierte Inhalt vonWas bedeuten Java-Thread-Pool-Parameter?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen