-1

我试图将一个变量传递给另一个类,但我的 getter 不会发送我的变量的更新值,它会发送我用来初始化它的值。

主类:

    OtherClass otherclass = new OtherClass(new Main());
    private boolean updateVar = true
    private int timer = 0;

    public void tick(){

        if(updateVar == true) timer++;
    }

    public int getTimer(){

        return timer;
    }

其他类:

    Main main;
    private int holdTimer;

    public OtherClass(Main main){

       this.main = main;
       holdTimer = this.main.getTimer();

          System.out.println(holdTimer);
    }

每次输出为0,有人可以帮忙吗?如果您想知道,我的线程每秒都会调用我的 tick()。

4

2 回答 2

2

因为你tick()在另一个线程中调用,你已经进入了并发和线程安全的黑暗世界。

简而言之,一个线程中所做的更改不一定对其他线程可见,除非您遵循一些严格的规则:

  • 使领域volatile
  • 所有对它的访问都必须同步

尔格:

private volatile int timer = 0;

public synchronized void tick(){
    if(updateVar == true) timer++;
}

pubic synchronized int getTimer(){
    return timer;
}

join()如果您不在主线程中的等待循环中,您可能还需要更新线程等待它完成。

于 2013-10-12T23:53:19.483 回答
0

tick()如果要增加成员变量,则需要调用。

于 2013-10-12T23:43:18.313 回答