Thread.join() und Thread.interrupt() hört nicht auf den thread

Ich habe einige Probleme mit stoppen meine threads.
Ich habe versucht, Sie anzurufen, beide Thread.join() und Thread.interrupt(), allein und zusammen, aber ich kann Sie nicht arbeiten.
Ich habe eine while Schleife in jeder Klasse, die ausgeführt wird, solange eine Boolesche genannt running gleich true.
Ich habe dann beenden Sie das Programm durch den Aufruf einer Methode namens stop. Die stop Methode stellt nur running auf false, so dass die while-Schleife beendet.

BEARBEITEN Code:

public class Game implements Runnable {

    //The Thread
    private Thread thread;

    //The program's running state
    private boolean running = false;

    //Create the Thread and the rest of the application
    public void create() {
        //Create the Thread
        thread = new Thread(this, "Game");
        //Start the Thread
        thread.start();
        //Set the program's running state to true
        running = true;
    }

    public void run() {
        while(running) {
            //Render, update etc...
        }

        //When the while loop has exited
        //(when running is false (when the stop method has been called))
        try {
            //Join the thread
            thread.join();
            //Interrupt the thread
            thread.interrupt();
        } catch(InterruptedException e) {
            //Print the exception message
            e.printStackTrace();
        }
        //Exit the program
        System.exit(0);
    }

    //Stop the game
    public void stop() {
        //Set the program's running state to false
        running = false;
    }

    //The main method
    public static void main(String[] args) {
        //Create a new instance of Game and start it
        new Game().create();
    }
Nicht genug code. Beachten Sie, dass der standard-Weg, um zu überprüfen, ob ein thread unterbrochen wird, ist zu prüfen, für Thread.currentThread().isInterrupted(). Lesen Sie die javadoc gezielt. Oder noch besser, verwenden Sie keine threads direkt und verwenden Sie ein ExecutorService. Und kaufen JCIP.
Sorry, ich habe nicht erwähnt, ich bin creaing ein Spiel, also nicht für die Verwendung von threads ist nicht eine option. Auch, wie viel code brauchen Sie?
Glaubst du wirklich, dass join() und interrupt() setzt deine running variable auf false? Ist es das, was die javadoc dieser Methoden behaupten?
Das ist die Basis. Ich habe alle rendering etc. innerhalb der Schleife.
AtomicBoolean bringt nichts auf die Tabelle über volatile wenn alles, was Sie nennen würde, ist es set und get.

InformationsquelleAutor Daniel Kvist | 2014-12-14

Schreibe einen Kommentar