Setze den Java-Exit-Code, ohne ihn zu beenden

8

In einem hochgradig gleichzeitigen Programm mit vielen Abschaltvorgängen fragen Sie sich, wie Sie den Exit-Code setzen, ohne System.exit () vorzeitig aufzurufen. Möglich, eine "diesen Code ausführen, wenn alles andere getan wird" -Methode? aber ich möchte den Exit-Code wirklich vorzeitig setzen.

    
djechlin 07.09.2012, 20:31
quelle

4 Antworten

3

Wenn ich richtig verstehe, was Sie wollen, ist, den Exit-Code irgendwie zu behalten, führen Sie einige Methoden aus und rufen Sie dann System.exit mit dem vordefinierten Exit-Code auf.
IMO, was Sie tun sollten, ist Shutdown-Haken stattdessen. I.e. Ihr Code wird ausgeführt, bevor die JVM heruntergefahren wird und (wenn ich Ihre Anforderung korrekt erhalten habe) das gleiche Ergebnis mit einer einfachen Codierungsimplementierung haben wird (dh statt der Verwendung von Statusvariablen und ungewöhnlicher Codelogik, um das zu erreichen, was Sie versuchen, usw.)

    
Cratylus 07.09.2012, 20:35
quelle
1

Lassen Sie einen Master-Thread alle anderen Threads spawnen, so dass er nur beendet wird, wenn alle anderen Threads abgeschlossen sind.

    
Guido Anselmi 07.09.2012 20:35
quelle
0
  

In einem sehr gleichzeitigen Programm mit vielen Abschaltvorgängen

Das ist ein Code-Geruch für mich.

Ich kann verstehen, wie mehrere Threads möchten, herunterzufahren, aber das sollten sie nicht tun dürfen.

Stattdessen würde ich eine globale Methode namens initiateShutdown(int code) erstellen. Diese Methode würde Logik enthalten, um festzustellen, wann es angemessen ist, tatsächlich herunterzufahren. Da Sie nicht möchten, dass ein Thread von dieser Methode zurückkehrt, können Sie eine Art von nicht zurückkehrender Sperre implementieren und den Thread dazu veranlassen, auf diese Sperre zu warten.

    
parsifal 07.09.2012 20:36
quelle
0

Speichern Sie das Ergebnis einfach irgendwo und verwenden Sie ein geeignetes Synchronisationstool, um zu bestätigen, dass Sie fertig sind. Wenn Sie fertig sind, lesen Sie einfach das gespeicherte Ergebnis und beenden Sie es mit System.exit (result).

Ich bin gespannt, ob mehrere Threads das Ergebnis setzen, welches sollten Sie verwenden?

    
Tobias Ritzau 07.09.2012 20:40
quelle

Tags und Links