Kann ich einen thread wieder, nachdem es gestorben ist?
Wenn ich start() auf einem Thread-Objekt und die run () - Methode zurückgegeben wird, ist es möglich den Aufruf von start() wieder?
eg,
MyThread myThread = new MyThread();
myThread.start();
//run method executes and returns in 2 seconds
//sleep for 5 seconds to make sure the thread has died
myThread.start();
Ich Frage mich nur, weil mein code wirft IllegalThreadStateExceptions, so möchte wissen, ob es ist, weil Sie nicht die oben genannten.
- Lesen Sie die javadoc-Lukas!
- Ich habe mir die javadoc, aber nur für die start () - Methode, die nicht den sound sehr klar.
- Huh? Was unklar ist etwa der Satz "Es ist nie legal, starten Sie ein thread mehr als einmal" auf eine Methode namens
start()
? - Ich war die dies Lesen: download.oracle.com/javase/1.4.2/docs/api/java/lang/...
- Neugierig: was wollen Sie tun? Ich vermute, dass die mit einer geplanten executor (
ScheduledExecutorService
), ist das nächste, was Sie erreichen wollen, aber bitte fühlen Sie sich frei, mich zu füllen in.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nein, das können Sie nicht. Und die Javadoc für die
- Thread.start()
Methode sagt Ihnen, dass!Runnable
statt AusweitungThread
dann die executor-framework bietet Ihnen die Möglichkeit, erneut vorlegen, einen job, oder haben Sie es laufen regelmäßig, etc.start()
zweimal"isConnected()
Methode aufSocket
- es zeigt nur, dass Sie, dass die Buchse hat, an einem gewissen Punkt, verbunden war. Völlig nutzlos!Aus einem Kommentar:
Könnten Sie
ThreadPoolExecutor
, die es erlauben würde, Sie zu übergeben, Aufgaben und lassen Sie den Dienst zuweisen, ein thread zu einer Aufgabe. Wenn die Aufgabe abgeschlossen ist, wird der thread geht im Leerlauf so lange, bis er die nächste Aufgabe.So, Sie müssen nicht neu starten einen thread, aber Sie würden wiederholen/fortsetzen einer Aufgabe.
NÖ.
Aus der Javadoc für java.lang.Thread:
Aus der javadoc:
Sehen die Thread.start() javadoc für mehr Informationen.
Gibt es andere Möglichkeiten, das zu erreichen, was Sie zu tun versuchen. Zum Beispiel, könnten Sie mit neuen Threads, die weiterhin die Arbeit, die getan wurde, im Thread mit der fertigen Ausführung. Möglicherweise möchten Sie auch zu untersuchen, die java.util.concurrent-Paket.
Vielleicht gibt es einen besseren Weg, dies zu tun, wenn Sie wollen, den thread zu beenden und neu zu starten mehrmals. Ich habe einen tile caching thread in C++ etwas ähnliches ist; es hält das, wenn es fertig ist, und unpaused, wenn es wieder benötigt. Ich bin neu in Java, aber von was ich sagen kann, Sie können benutzen Objekt.wait() zu pausieren, und Objekt.notify() zum fortsetzen von threads. Vielleicht Sie könnte prüfen, diejenigen, die nicht in der Dokumentation und redesign deinen thread zu pausieren und fortzusetzen anstatt zu beenden.
wait
undnotify
ist ganz der falsche Weg zu gehen, um einen Parkplatz einen thread für den Einsatz bei der Ausführung von mehreren Aufgaben. Der richtige Weg, BTW, ist der Einsatz eines Testamentsvollstreckers (wieThreadPoolExecutor
) zu tun, der thread Parkplätze für Sie.