G
Galwin
Gast
Hallo,
ich versuche gerade einen klasse zu schreiben, die ein array von werten bekommt und für jeden wert ein neuen thread öffnet, der diesen dann weiterverarbeitet. Die anzahl der threads soll jedoch begrenzt sein, also nur maximal 10 threads. Ich würde es gerne so programmieren, dass die klasse die die threads erstellt sich mit wait schlafen legt, wenn sie erkennt, dass bereits die maximale anzahl von threads erstellt wurde. Aufgeweckt wird der thread wieder von jedem thread der seine berechnung beendet hat. Mit prozessen und anderen programmiersprachen habe ich ähnliches schon öfter programmiert, aber wenn ich hier notify von einem thread aufrufen lasse, kommt eine fehlermeldung, dass der thread nicht die berechtigung dazu habe. Ich habe aus testzwecken erst einmal einfach ein sleep eingebaut .. allerding ist das recht unschön. Kann ich es überhaupt so realisieren wie ich es geplant habe oder gibt es doch so große unterschieder zwischen threads und prozessen?
ich versuche gerade einen klasse zu schreiben, die ein array von werten bekommt und für jeden wert ein neuen thread öffnet, der diesen dann weiterverarbeitet. Die anzahl der threads soll jedoch begrenzt sein, also nur maximal 10 threads. Ich würde es gerne so programmieren, dass die klasse die die threads erstellt sich mit wait schlafen legt, wenn sie erkennt, dass bereits die maximale anzahl von threads erstellt wurde. Aufgeweckt wird der thread wieder von jedem thread der seine berechnung beendet hat. Mit prozessen und anderen programmiersprachen habe ich ähnliches schon öfter programmiert, aber wenn ich hier notify von einem thread aufrufen lasse, kommt eine fehlermeldung, dass der thread nicht die berechtigung dazu habe. Ich habe aus testzwecken erst einmal einfach ein sleep eingebaut .. allerding ist das recht unschön. Kann ich es überhaupt so realisieren wie ich es geplant habe oder gibt es doch so große unterschieder zwischen threads und prozessen?
Code:
public class factory extends Thread{
public static int thread_count = 0;
public static int thread_numbers = 100;
public factory(){
}
public void run(){
while(thread_numbers > 0){
if(thread_count >= 10 || thread_numbers <= 0){
try {
sleep(300);
//statt sleep soll hier ein wait stehen
} catch (InterruptedException e) {
e.printStackTrace();
}
}
else {
thread_count++;
thread_numbers--;
klasse t = new klasse();
t.start();
}
}
}
}
Code:
public class klasse extends Thread{
public klasse(){
}
public void run(){
int warten = (int)(Math.random()*10000);
try {
sleep(warten);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("Warte "+warten+" millisekunden");
factory.thread_count = factory.thread_count-1;
System.out.println("Anzahl der noch offenen Aufgaben: "+factory.thread_numbers+" Threads: "+factory.thread_count);
//Hier sollte das notify stehen um die factory klasse wieder aufzuwecken
}
}