Hallo Gemeinde,
ich habe ein paar Fragen zum ExecutorService.
Hier mal ein paar Code-Beispiele:
Im ersten Beispiel laufe ich irgendwann in eine Exception, die mir sagt, dass zuviele native Threads erzeugt wurden.
Im zweiten Beispiel passiert das nicht. Ich vermute, dass das daran liegt, dass ich keine neuen MyRunnable-Objekte erzeuge, sondern immer das Selbe Objekt übergebe.
Mich würde jetzt interessieren, ob der executorService im zweiten Beispiel trotzdem jeden MyRunnable parallel ausführen lässt, oder nicht.
Der Unterschied zwischen beiden Versionen ist, dass der MyRunnable im zweiten Fall seine Daten aus einer Queue bezieht, diese also nicht immer neu via Konstruktor übergeben werden brauchen.
Das beabsichtigte Verhalten wäre, dass so viele MyRunnable-Instanzen wie nur möglich parallel Daten aus der Queue verarbeiten.
Welches der beiden Codebeispiele wäre hier der richtige Ansatz?
Oder gibt es da noch andere?
Referenzen zu BestPractices oder Ähnlichem sind immer gerne gesehen.
Beste Grüße
- Sekundentakt
ich habe ein paar Fragen zum ExecutorService.
Hier mal ein paar Code-Beispiele:
Java:
while(someCondition)
executorService.execute(new MyRunnable(mapToWorkOn)); //Hier erhalte ich irgendwann eine Exception, dass die maximale Anzahl an Threads erreicht ist.
Java:
MyRunnable t = new MyRunnable(mapToWorkOnQueue);
while(someCondition)
executorService.execute(t);
Im ersten Beispiel laufe ich irgendwann in eine Exception, die mir sagt, dass zuviele native Threads erzeugt wurden.
Im zweiten Beispiel passiert das nicht. Ich vermute, dass das daran liegt, dass ich keine neuen MyRunnable-Objekte erzeuge, sondern immer das Selbe Objekt übergebe.
Mich würde jetzt interessieren, ob der executorService im zweiten Beispiel trotzdem jeden MyRunnable parallel ausführen lässt, oder nicht.
Der Unterschied zwischen beiden Versionen ist, dass der MyRunnable im zweiten Fall seine Daten aus einer Queue bezieht, diese also nicht immer neu via Konstruktor übergeben werden brauchen.
Das beabsichtigte Verhalten wäre, dass so viele MyRunnable-Instanzen wie nur möglich parallel Daten aus der Queue verarbeiten.
Welches der beiden Codebeispiele wäre hier der richtige Ansatz?
Oder gibt es da noch andere?
Referenzen zu BestPractices oder Ähnlichem sind immer gerne gesehen.
Beste Grüße
- Sekundentakt
Zuletzt bearbeitet: