Ich habe einen "MasterThread" JobStarterAndControllerThread(), der ein ThreadArray aus ProcessThread()s verwaltet. Hier mal eine vereinfachte Darstellung:
Beim starten des jeweiligen Process-Threads hole ich mir dessen Thread-ID und geben Sie an eine andere Verwaltungsinstanz zurück. So kann ich jeden Thread auf Wunsch über seine Thread-ID und die Funktion stopThread() beenden.
Was aber wenn der Thread sich selbst stoppt? Durch einen Fehler oder weil er einfach mit seinen Aufgaben fertig ist? In meinem Programm ist es wichtig, davon Notiz zu bekommen. Bisher löse ich es so, dass die Process-Threads sich beim AppController abmelden und der informiert den JobStarterAndControllerThread() und alle anderen Instanzen.
Ich hatte aber gedacht, dass es doch möglich sein müsste, dass der JobStarterAndControllerThread() von dem sich beendenen Thread selbst die Info bekommt. Leider habe ich keinen Plan, wie ich das anstellen soll. Irgendwie muss ich ja dabei die threadID in Erfahrung bringen.
Hinzu kommt, dass der JobStarterAndControllerThread() dann noch den AppController informieren soll, dass einer der ProcessThread()s beendet wurde. Der JobStarterAndControllerThread() soll aber weiter laufen, da er ja noch die anderen Threads verwaltet.
Wie kann ich das anstellen?
Java:
package JohnDo.Threads.Controller;
// --------------------------------------
// Class: JobStarterAndController
//
// starts and controlls all process threads
// --------------------------------------
public class JobStarterAndControllerThread extends Thread{
// Imported Classes
//
private ProcessThread processThread;
private ProcessThread threads[];
// Internal variables
//
public JobStarterAndControllerThread () {
threads = new ProcessThread[100];
};
// Instance methods
//
public void run(){
try{
while(true){
Thread.sleep(100);
}
}catch(InterruptedException e){
this.interrupt();
}
}
private long activateThread(){
// neuen Thread hinzufuegen und starten
//
processThread = new ProcessThread();
long threadID = 0;
for(int i=0; i < threads.length; i++){
if(threads[i] == null){
threads[i] = processThread;
threads[i].start();
threadID = threads[i].getId();
break;
}
}
return threadID;
}
public void stopThread(long threadID){
// Thread anhalten
//
for(int i=0; i < threads.length; i++){
if(threads[i] != null){
if(threads[i].getId() == threadID){
threads[i].interrupt();
break;
}
}
}
}
}
Beim starten des jeweiligen Process-Threads hole ich mir dessen Thread-ID und geben Sie an eine andere Verwaltungsinstanz zurück. So kann ich jeden Thread auf Wunsch über seine Thread-ID und die Funktion stopThread() beenden.
Was aber wenn der Thread sich selbst stoppt? Durch einen Fehler oder weil er einfach mit seinen Aufgaben fertig ist? In meinem Programm ist es wichtig, davon Notiz zu bekommen. Bisher löse ich es so, dass die Process-Threads sich beim AppController abmelden und der informiert den JobStarterAndControllerThread() und alle anderen Instanzen.
Ich hatte aber gedacht, dass es doch möglich sein müsste, dass der JobStarterAndControllerThread() von dem sich beendenen Thread selbst die Info bekommt. Leider habe ich keinen Plan, wie ich das anstellen soll. Irgendwie muss ich ja dabei die threadID in Erfahrung bringen.
Hinzu kommt, dass der JobStarterAndControllerThread() dann noch den AppController informieren soll, dass einer der ProcessThread()s beendet wurde. Der JobStarterAndControllerThread() soll aber weiter laufen, da er ja noch die anderen Threads verwaltet.
Wie kann ich das anstellen?
Zuletzt bearbeitet: