Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我的getter赢了';不要给出更新的变量_Java_Getter Setter - Fatal编程技术网

Java 我的getter赢了';不要给出更新的变量

Java 我的getter赢了';不要给出更新的变量,java,getter-setter,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++; }

我试图将一个变量传递给另一个类,但我的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(),以防您感到奇怪。

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

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

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

  • 使字段
    不稳定
  • 必须同步对它的所有访问
因此:


如果主线程中没有等待循环,您可能还必须
join()
更新线程以等待它完成。

“每次它显示为0时,有人能帮忙吗?”
--什么是“每次”。在代码中只调用一次。请显示您用来测试它的真实代码。什么叫tick()?我看不出您在哪里更改它。不需要在问题标题中添加标记。所以我们已经有了标签系统。看一看。我的线程正在调用它。我没有显示它,因为这将是一个有点不必要的抱歉that@NGSoftware:不必要?认真地这是钥匙。如果不显示它,我们将无能为力。@NGSoftware如果要在几个线程中使用同一变量,则应将其声明为
volatile
,以防止每个线程对其进行缓存。
private volatile int timer = 0;

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

pubic synchronized int getTimer(){
    return timer;
}