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.
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.)
Lassen Sie einen Master-Thread alle anderen Threads spawnen, so dass er nur beendet wird, wenn alle anderen Threads abgeschlossen sind.
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.
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?