Ich poste mal ein Codebeispiel und würd gerne wissen ob das so halbwegs sinnig ist. Gedanke war das ich einen Thread brauche der permanent etwas überwacht. Darf aber nur einmal gleichzeitig laufen, daher bin ich auf die Idee gekommen ein Singleton draus zu machen.
Ich bin nicht ganz sicher was passiert wenn ich shutdown aufrufe wärend der thread nicht gerade im sleep ist.
Ich bin nicht ganz sicher was passiert wenn ich shutdown aufrufe wärend der thread nicht gerade im sleep ist.
Code:
public class LogAgent extends Thread {
private static Logger logger = Logger.getLogger(LogAgent.class);
private boolean finish = false;
private static LogAgent singleton=null;
public static void startup(){
// Noch garkeiner da
if(singleton==null){
singleton=new LogAgent();
singleton.start();
logger.debug("Singleton war null");
return;
}
// Gestorben
if(!singleton.isAlive()){
singleton=new LogAgent();
singleton.start();
logger.error("Singleton war tot");
}else{
logger.debug("Singleton war noch ok");
}
}
public static void shutdown(){
if(singleton!=null){
singleton.finish=true;
singleton.interrupt();
}
}
public void run(){
logger.info("Log Agent starting");
while(!finish){
// ....
// Schlafen
try{
logger.debug("Schlafe");
this.sleep(sleeptime*1000*60);
}
catch(Exception e){
logger.error("Schlaf unerwartet unterbrochen");
}
} // Ende While
logger.info("Log Agent stopping");
}
}