Ich habe ein Beispiel für isAlive()
Methode Java-Threading versucht. Aber ich fand, dass isAlive()
Methode false
zurückgibt, auch wenn Thread bereits gestartet wurde. Kann mir bitte jemand sagen, was mache ich falsch? Hier ist das Code-Snippet.isAlive() Methode von Java-Thread funktioniert nicht richtig?
package app;
public class ThreadAliveDemo {
public static void main(String[] args) {
Thread myThread;
myThread = new Thread()
{
public void run()
{
Thread.sleep(3000);
System.out.println("My Thread.");
}
};
myThread.setName("My Thread");
myThread.start();
if(!myThread.isAlive())
{
myThread.setName("My Thread");
myThread.start();
}
}
}
Verwenden Sie stattdessen Thread.getState(), es bietet zusätzliche Informationen. das zweimalige Starten eines Threads hat ebenfalls keine Wirkung. – bestsss
Zum Ratschlag von @bestsss: Brian Goetz 'Buch, Java Concurrency in Practice, sagt: "Das Ergebnis von Thread.getState sollte nicht für die Steuerung des gemeinsamen Zugriffs verwendet werden und ist für den Test sehr begrenzt. Sein primäres Dienstprogramm dient als Debugging-Quelle Information." – WoodenKitty
@WoodenKitty, während ein Thread nicht gestartet wurde, wäre getState() stabil (muss eventuell mit dem Threadstart synchronisiert werden). Goetz 'Rat ist sehr solide, aber in diesem Fall ist er nicht anwendbar. – bestsss