我的getter不会给出更新的变量

时间:2013-10-12 23:37:19

标签: java getter-setter

我正在尝试将变量传递给另一个类,但我的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(),以防你想知道。

2 个答案:

答案 0 :(得分:2)

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

简单地说,除非你遵循一些严格的规则,否则在一个线程中所做的更改不一定对其他线程可见:

  • 制作字段volatile
  • 必须同步对它的所有访问

埃尔戈:

private volatile int timer = 0;

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

pubic synchronized int getTimer(){
    return timer;
}

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

答案 1 :(得分:0)

如果希望成员变量递增,则需要调用tick()