我有一个简单的问题:

Class A{

    B b;

    public void doSth{
         //This method should execute only once
         b.modify(); //calls doSth() again...
    }
}


程序运行时,将A的实例传递给B,然后B调用doSth(作为实例的回调)。 b.modify使B再次调用A.doSth(),这将无限次调用。我要实现的目标是:我要执行一次doSth(),修改B,然后在下一次执行时以某种方式停止无限调用链,并且不执行b.modify

任何建议,不胜感激。

最佳答案

将状态标志添加到您的班级:

Class A {

    B b;
    private volatile boolean called;

    public synchronized void doSth {
         if (called) return;
         called = true;
         b.modify();
    }
}


如果有多个线程在使用,请使用volatile

10-01 20:47