2 Stimmen

Wie kann man einen nicht unterbrechbaren Thread beenden?

Wir führen ein AI Programmierwettbewerb, bei dem die Teilnehmer ein AI die auf dem JVM über unser API wir bieten sie an. Wir stecken sie in einen Sandkasten, indem wir ihre Möglichkeiten mit einer SecurityManager und während der Laufzeit setzen sie einfach mehrere Flaggen, die ihre Entscheidungen darstellen. Die einzige Interaktion zwischen unserem System und ihren AI ist durch diese Flaggen, so dass es keine negativen Auswirkungen auf uns hat, wenn ihr Thread plötzlich stirbt.

Wenn ein AI viel zu lange rechnet, möchten wir ihren Thread schließen. Wir können jedoch nicht garantieren, dass wir ihren Thread zerstören werden. Ein möglicher Grund dafür ist, dass die AI geht in eine Endlosschleife ohne Blockierung über, wodurch Thread.interrupt() unbrauchbar. Thread.stop() ist unzuverlässig, denn wenn sie sich in einem Try-Catch-Block befinden, wird die ThreadDeath Ausnahme gefangen werden, und hat keine Probleme für uns, weil sie nichts Böses anfassen und es uns egal ist, wenn sie sterben.

Derzeit ignorieren wir ihren Thread und machen ohne sie weiter, nachdem sie die Zeit überschritten haben, aber ihre Endlosschleife wird im Hintergrund weiterlaufen, bis die JVM stirbt. Dies ist für uns inakzeptabel, da wir die Spiele im Hintergrund auf einem Webserver rund um die Uhr laufen lassen werden, so dass wir so viel Stabilität wie möglich wollen. Ein Gedanke war, jedes Spiel in einem separaten JVM aber das ist viel komplexer, als wir es uns vorstellen können.

Gibt es eine sichere Methode, um das Gewinde zu zerstören?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X