我有两个类,我试图操纵一个变量,例如
public class A {
public static void main(String[] args) {
while(game_over[0] == false) {
System.out.println("in the while-loop");
}
System.out.println("out of the while-loop");
}
static boolean[] game_over = {false};
}
和
public class B {
public boolean[] game_over;
public printBoard(boolean[] game_over) {
this.game_over = game_over;
}
public void run() {
for (int i = 0; i < 10; i++) {
// do something
}
game_over[0] = true;
System.out.println("GAME OVER");
}
}
提供的代码片段并不是实际可行的代码,我更关心这个概念。在我的程序中,A类创建了一个利用B类的线程,我希望B类能够影响变量'game_over',这样A类中的while循环就会受到变化的影响...任何想法我怎么能成功更新变量?感谢。
答案 0 :(得分:1)
不要为此使用数组,这使得确保数据竞争免费应用程序变得更加困难。
由于您希望能够将game_over
标志作为独立对象传递,因此实现正确的多线程应用程序的最简单方法是使用AtomicBoolean
类。
import java.util.concurrent.atomic.AtomicBoolean;
class B {
private AtomicBoolean game_over;
public B(AtomicBoolean game_over) {
this.game_over = game_over;
}
public void run() {
// do stuff
game_over.set(true);
}
}
并在你的班级A:
public class A {
static AtomicBoolean game_over = new AtomicBoolean();
public static void main(String[] args) {
B b = new B();
Thread t = new Thread(b);
t.start();
while (!game_over.get()) {
System.out.println("in the while-loop");
}
System.out.println("out of the while-loop");
}
}