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