2016-08-18 6 views
1

Es ist alles im Titel, wirklich. Ich weiß, Thread.sleep() macht nur den aktuellen Thread schlafen, aber gibt es eine Möglichkeit, alle Threads zu zwingen, gleichzeitig zu schlafen, oder würde das auf die Selbstverwaltung sein?Gibt es eine Möglichkeit, alle laufenden Threads in Java schlafen zu lassen()?

+1

Jeder Thread würde sich haben einzuschläfern. –

+0

Vielleicht hilft diese Frage: http://stackoverflow.com/questions/20666454/how-to-pause-all-running-threads-and-then-resume – byxor

+0

Haben Sie versucht, über alle laufenden Threads zu iterieren und sie zu stoppen Einer nach dem anderen? – Abdo

Antwort

3

Es wäre gefährlich, den Thread von außen in den Schlaf zu legen, da er momentan in einem Zwischenzustand sein kann (das ist der Grund, warum es nicht gut ist, Thread von außen zu töten). Also mach es bitte über Selbstmanagement.

+0

Wenn die Threads eines Programms ordnungsgemäß synchronisiert werden, würde der schlimmste Schaden, den ein externer Agent verursachen könnte, indem er vorübergehend einen oder mehrere Threads pausiert, sein, dass das Programm einen Echtzeittermin verpasst oder eine Leistungsanforderung nicht erfüllt. Es konnte keine Datenkorruption verursachen. Das heißt, * IF * das Programm ist richtig synchronisiert. Selbst wenn es nicht richtig synchronisiert wäre, würde das gleichzeitige Anhalten aller seiner Threads für exakt das gleiche Zeitintervall auch keinen Schaden verursachen. –

+1

@jameslarge Ihr Thread steuert einen Schrittmotor. Weil es eingeschläfert wurde, sagte es ihm nicht, aufzuhören. Es traf jetzt die Wand und beschädigte das Gerät. Kein echtes Leben Beispiel? Ich habe einen 20K-Prototyp mit genau diesem Problem in C (der Thread wurde geschlafen, weil ich einen Debugger hatte). Es ist nicht generisch sicher, nur weil es synchronisiert ist. –

+0

@GabeSechan, Das ist die Art von Sache, die ich meinte, als ich sagte: "Ich vermisse eine Echtzeit-Deadline", aber ich denke, die Betonung ist falsch ausgefallen. Echtzeit-Software ist eine ganze Kategorie für sich. Ich weiß, wovon du sprichst, nur in meinem Fall war es eine Innenwand, die den Schaden (repariert mit etwas Trockenmauer, Schlamm und Farbe) nahm, und der Prototyp war unversehrt. PS .: Meine offizielle Empfehlung an das mechanische Konstruktionsteam lautete: "Wir könnten dies mit kleineren Motoren machen." –

3

Die Antwort ist einfach: Es gibt keine Möglichkeit, den ganzen Thread von Java aus schlafen zu lassen (von der Innenseite der Anwendung).

Darüber hinaus gibt es auf Java viele interne Threads (wie GC-Thread, Finalization-Thread, ...), die Sie nicht manipulieren können, so dass "all" niemals möglich sein wird.

Grüße,

Loïc

Verwandte Themen