Java 如何并行运行两个while循环?(爪哇)
我想让我的比赛更有效率。我想用两个线程而不是一个线程。现在我想让这两个类使用while循环并行运行。但是如果我现在开始游戏,第二个线程将不会被释放,直到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();
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循环。