Hallo liebes Forum,
ich moechte gerne mit einer vorab gegebenen Anzahl an Threads eine Aufgabe parallel ausfuehren.
Im Prinzip wird eine Berrechnung durchgefuehrt bei der jeder Thread einen Teil einer Gesamtsumme beitraegt.
Mein Ansatz ist der:
1. statisches Array mit fester Anzahl initialisierter Threads
2. (synchronized) Monitor auf den die Threads zugreifen und die ihren Teil zur Summe addieren.
Mein Problem ist, dass es mehr Aufgaben als Threads gibt. Daher soll ein Thread nachdem er fertig ist, wieder neu gestartet werden und eine weitere Aufgabe ausfuehren bis eben alle Aufgaben fertig sind.
Im folgenden Kode ist m= die Anzahl der Aufgaben, und decision = Anzahl der Threads.
Koennt ihr mir einen Tipp geben wie ich das am elegantesten angehen soll?
Laesst sich das mit ThreadGroups oder Executor/ThreadPools irgendwie loesen?
Habe einiges mit State Abfragen versucht. Sowas wie:
Allerdings kam ich damit nicht weit und habe ausserdem das Gefuehl dass das der Holzpfad ist.
Gruss
styggje
ich moechte gerne mit einer vorab gegebenen Anzahl an Threads eine Aufgabe parallel ausfuehren.
Im Prinzip wird eine Berrechnung durchgefuehrt bei der jeder Thread einen Teil einer Gesamtsumme beitraegt.
Mein Ansatz ist der:
1. statisches Array mit fester Anzahl initialisierter Threads
2. (synchronized) Monitor auf den die Threads zugreifen und die ihren Teil zur Summe addieren.
Mein Problem ist, dass es mehr Aufgaben als Threads gibt. Daher soll ein Thread nachdem er fertig ist, wieder neu gestartet werden und eine weitere Aufgabe ausfuehren bis eben alle Aufgaben fertig sind.
Im folgenden Kode ist m= die Anzahl der Aufgaben, und decision = Anzahl der Threads.
Java:
for (int j = 1; j <= m; j++) {
for (int i = 0; i < decision; i++) {
//---------???
Thread[i].start();
//---------???
}
}
Koennt ihr mir einen Tipp geben wie ich das am elegantesten angehen soll?
Laesst sich das mit ThreadGroups oder Executor/ThreadPools irgendwie loesen?
Habe einiges mit State Abfragen versucht. Sowas wie:
Java:
if(Thread[i].getState() == Thread.State.NEW){ dann fuehre aus}
else if( Thread[i].getState()... usw
Allerdings kam ich damit nicht weit und habe ausserdem das Gefuehl dass das der Holzpfad ist.
Gruss
styggje