Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何并行运行两个while循环?(爪哇)_Java_Multithreading_While Loop - Fatal编程技术网

Java 如何并行运行两个while循环?(爪哇)

Java 如何并行运行两个while循环?(爪哇),java,multithreading,while-loop,Java,Multithreading,While Loop,我想让我的比赛更有效率。我想用两个线程而不是一个线程。现在我想让这两个类使用while循环并行运行。但是如果我现在开始游戏,第二个线程将不会被释放,直到while循环在第一个线程中停止。 这是我的代码: public class Game { public void Game() { Update update; Render render; update.start(); render.start();

我想让我的比赛更有效率。我想用两个线程而不是一个线程。现在我想让这两个类使用while循环并行运行。但是如果我现在开始游戏,第二个线程将不会被释放,直到while循环在第一个线程中停止。 这是我的代码:

public class Game {

     public void Game() {
         Update update;
         Render render;

         update.start();
         render.start();
     }
}

class Update implements Runnable {
    private Thread thread;
    private boolean running;

    @Override
    public void run() {

       while(running) {
          //Update Stuff
       }

    }

    public synchronized void start() {
         if(running)
           return;
         running = true;
         thread = new Thread(this);
         thread.start();
    }
}

class Render implements Runnable {
    private Thread thread;
    private boolean running;

    @Override
    public void run() {

       while(running) {
          //Render Stuff
       }

    }

    public synchronized void start() {
         if(running)
           return;
         running = true;
         thread = new Thread(this);
         thread.start();
    }
}

如何同时启动两个线程?提前感谢。

类似的方法应该可以:

public class Game {
    volatile boolean running = true;
    Thread updateThread;
    Thread renderThread;

    public void Game() {
    }

    public void start() {
        Update update = new Update(this);
        updateThread = new Thread(update);
        updateThread.start();
        Render render = new Render(this);
        renderThread = new Thread(render);
        renderThread.start();
    }

    public void waitForFinish() throws InterruptedException {
        updateThread.join();
        renderThread.join();
    }

    boolean isRunning() {
        return running;
    }
}

class Update implements Runnable {
    private final Game game;

    Update(Game game) {
        this.game = game;
    }

    @Override
    public void run() {

        while (game.isRunning()) {
            try {
                Thread.sleep(1000);
                System.out.println("Update");
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

    }
}

class Render implements Runnable {
    private final Game game;

    Render(Game game) {
        this.game = game;
    }

    @Override
    public void run() {

        while (game.isRunning()) {
            try {
                Thread.sleep(100);
                System.out.println("Render");
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

    }

}

private void test() throws InterruptedException {
    Game game = new Game();
    game.start();
    game.waitForFinish();
}

您只需要调用
thread.start()初始化
线程后
。如果要修改从不同线程运行的
的值,也应该小心,在这种情况下,应该将其标记为
volatile
。您提供的代码比无法运行并行线程有更大的问题。如前所述,
Game
甚至不应该编译,而且
Runnable
start()
方法实际上都不会启动任何东西。您所描述的行为——第二个线程在while循环在第一个线程中停止之前不会被释放——绝对不会显示出来,并且看起来不可能是适当纠正的结果。那么这里的实际问题是什么呢?添加
thread.start()
开始
方法的末尾,我在复制时出错。代码现在是正确的。我想知道如何同时使用两个while循环。