ThreadPoolExecutor

Status
Nicht offen für weitere Antworten.

Tallan

Bekanntes Mitglied
Hallo zusammen,

ich baue grade einen ThreadPoolExecutor,
läuft soweit auch wie vorgesehen nur bin ich mir bei 1-2 Dingen nicht ganz sicher.
Link zur API Java Platform SE 6

Hier kann eine keepAliveTime angegeben werden die Threads die länger als die angebene Zeit ideln terminiert. ( zumindest wenn ich das richtig verstanden habe )

Der Threadpool besitzt eine Anzahl Threads die arbeiten der rest liegt in einer FiFo Queue,
Wenn ein Thread abgearbeitet ist rückt ein neuer "Job" der Runnable implementiert nach und wird als Thread ausgeführt. Sollte dieser nun länger als keepAliveTime ideln wird er Terminiert sofern noch weitere Jobs warten.

Diese Terminierung würde ich gerne Testen, ein Sleep im Thread der größer als die besagte Idle Time brachte leider keinen Erfolg, daher vermute ich das ich entweder das ganze etwas falsch verstanden habe oder das sleep einfach kein idle ist.

Gib es eine Möglichkeit das zu testen bzw. den Runnable Job zum ideln zu bringen?
 

Marco13

Top Contributor
Bin gerade nicht sicher, aber so als Tipp: mit runnable.wait() könnte es gehen (und würde dann ggf. aus dem wait heraus die "gewünschte" InterruptedException werfen)
 
I

ign0rant

Gast
Die keepAliveTime bezieht sich nur auf Threads, die nicht in Benutzung sind. Sobald du einen Thread benutzt, indem du ein Runnable ausführen lässt, kannst du darin solange schlafen wie du willst, das interessiert den Executor nicht.
 

Tallan

Bekanntes Mitglied
Die keepAliveTime bezieht sich nur auf Threads, die nicht in Benutzung sind. Sobald du einen Thread benutzt, indem du ein Runnable ausführen lässt, kannst du darin solange schlafen wie du willst, das interessiert den Executor nicht.

bist du dir sicher? so wie ich das verstanden habe geht es um threads die in dem pool liegen der ausgeführt wird und nicht um die in der fifo, die können ja logischerweise garnicht abgearbeitet werden bis die im pool abgearbeitet wurden.
 

FArt

Top Contributor
Keep-alive times
If the pool currently has more than corePoolSize threads, excess threads will be terminated if they have been idle for more than the keepAliveTime
Threads, die gerade laufen sind
a) nicht im Pool
b) aus Sicht des Pools nicht im Idle

Babel Fish übersetzt das so:
Wenn die Lache z.Z. mehr als Gewinde, corePoolSize hat, werden überschüssige Gewinde beendet, wenn sie für mehr als das keepAliveTime untätig gewesen sind
 

Tallan

Bekanntes Mitglied
ich formuliere was ich sagte mal um:

im Threadpool gibt es 2 Bereiche A und B

A arbeitet Threads ab.
B ist eine FiFo liste.
Wenn in A ein Thread fertig ist rückt einer aus der Fifo in B nach.

Wenn in A ein Thread idelt soll er nach keepAliveTime terminiert werden.


soviel zumindest dazu wie ich das verstanden habe.
Bleibt die Frage ob das so richtig ist und falls ja wie ich keepAliveTime testen kann.
Also wie ich den idle zustand "erzeugen" kann...
Sleep und Wait brachten keinen erfolg.
 

FArt

Top Contributor
Und wo ist der Pool? Da sind nämlich die Threads, die auf Aufträge warten und somit im idle Zustand sind.

[edit]
lol... fifo-Liste ist der Pool? Damit kein Thread mehr oder weniger arbeiten muss, wie ein anderer?

Dann geht es um die Threads in der Liste. Die langweilen sich und können entsprechende behandelt werden.
 
Zuletzt bearbeitet:
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben