Folgender Code:
Und die ThreadClass:
Jetzt passiert folgendes:
Wenn ich das Thread-Objekt über
erzeuge, dann weiss er innerhalb von run() nicht, dass er ein Daemon ist. isDaemon liefert also false. Von aussen, also in der main ist er aber ein Daemon. is Daemon liefert true.
Er verhält sich auch genauso wie ein Daemon.
Erzeuge ich das Objekt über
dann ist ihm auch intern bekannt, dass er ein Daemon ist. Das verhalten beider Varianten ist gleich, nur einmal liefter isDaemon() intern true und einmal false, obwohl beides true sein müsste.
Klärt mich auf. Wieso ist das so?
Code:
public static void main(String args[]) throws InterruptedException{
Thread myThread = new Thread(new ThreadClass("Fieser Daemon"));
myThread.setDaemon(true);
myThread.start();
if(myThread.isDaemon()){
System.out.println("Daemon nach aussen");
}else{
System.out.println("KEIN Daemon nach aussen");
}
System.out.println();
System.out.println("Thread [" + Thread.currentThread().getName() + "] ** DONE **");
}
Code:
public class ThreadClass extends Thread
{
ThreadClass(String name)
{
super(name);
}
public void run()
{
int count;
System.out.println("Ein Thread, der " + this.getName() + " heisst.");
// this.setDaemon(true);
if(isDaemon())
{
System.out.println("Daemon");
}
else
{
System.out.println("KEIN Daemon");
}
count = 0;
while(true)
{
count++;
if(count >= 20) break;
synchronized(this)
{
try
{
wait(500);
}
catch(InterruptedException ie)
{
}
}
System.out.println(count);
}
System.out.println("Thread " + this.getName() + " kehrt zurueck...");
return;
}
}
Jetzt passiert folgendes:
Wenn ich das Thread-Objekt über
Code:
Thread myThread = new Thread(new ThreadClass("Fieser Daemon"));
Er verhält sich auch genauso wie ein Daemon.
Erzeuge ich das Objekt über
Code:
Thread myThread = new ThreadClass("Fieser Daemon");
Klärt mich auf. Wieso ist das so?