如何使用回调吧?

时间:2013-05-30 11:15:57

标签: java multithreading callback

我搞乱了一些模式,使代码更加模块化。所以我有这样的事情:

class A implements ICallback {
     MyObject o;
     B b = new B(this, someParameter);

     @Override
     public void callback(MyObject o){
           this.o = o;
     }
}

class B {
     ICallback ic;
     B(ICallback ic, someParameter){
         this.ic = ic;
     }

    new Thread(new Runnable(){
         public void run(){
             // some calculation
             ic.callback(myObject)
         }
    }).start(); 
}

interface ICallback(){
    public void callback(MyObject o);
}

我必须在MyObject中等待A,因此我正在使用callback通知A Thread的工作是否在B {1}}完成了。但是现在我必须把所有逻辑都用来处理MyObject并进一步处理callback

我可以以某种方式避免这种情况,还是以正确的方式?

1 个答案:

答案 0 :(得分:2)

您的方法基本上是合理的,但class A本身可能不会实现ICallback。更典型,更灵活的方案是将匿名回调实现的实例传递给B

另请注意,回调的所有处理都将在B启动的线程上完成。

与上述观察相关的是您对callback处理MyObject的所有处理的疑虑的答案:由于提供MyObject的行为,基本上没有其他办法可以做到这一点由B的线程启动,控件只能从该方法向外流动。如果您希望处理跳转到主线程,则需要一个更复杂的方案来阻止队列。