ich habe ein kleines Java (logik) Problem und bräuchte mal ein paar pfiffige Leute mit guten Einfällen ;)
SItuation:
- Ich habe ca. 30-40 Threads die sehr rechenintensiv sind
- um den Rechner etwas zu schonen möchte ich, dass immer nur max. 5 Stück gleichzeitig laufen
- sobald einer fertig ist soll der nächste (aus der Warteleiste) gestartet werden
Mein Problem:
Wenn ich die Threads in einer Schleife wie hier starte:
Code: Alles auswählen
Thread scn[] = new Thread[dirs.size()];
for (File f : dirs)
{
scn[z] = new Scanner(f);
}
for (int aktID = 0; aktID < 5; aktID++)
{
scn[aktID].start();
System.out.println("scn[" + aktID + "].start();");
}
for (int aktID = 0; aktID < 5; aktID++)
{
scn[aktID].join();
System.out.println("scn[" + aktID + "].join();");
}
Vermutlich ist es ganz einfach und ich sitze schon zulange davor um die Lösung zu finden :(
Meine Vermutung ist:
Ich benötige einen EventListener in der Klasse Scanner der anschlägt sobald er fertig ist. Wenn dieses Event ausgelöst wird muss in der Main Klasse der nächste Thread gestartet werden. Der "scn[x].join()"-Bereich würde dann wegfallen, da er duch das "Fertig"-Event abgelöst wird.
Liege ich mit der Vermutung richtig oder wäre das so nicht möglich? Oder gibts noch was besseres?
Schon Mal danke für die Hilfe :)