在Java中影响不同类中的变量

时间:2017-04-06 04:22:50

标签: java variables scope pass-by-value

我有两个类,我试图操纵一个变量,例如

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循环就会受到变化的影响...任何想法我怎么能成功更新变量?感谢。

1 个答案:

答案 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");
    }
}