java - 如何正确使用回调?

标签 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);
}

我必须等待 A 中的 MyObject,因此我使用 callback 来通知 A如果B中的Thread的工作完成。但现在我必须将所有逻辑来处理 MyObject 并在 callback 中进行进一步处理。

我可以以某种方式避免这种情况吗?或者这是正确的方法吗?

最佳答案

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

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

与上述观察相关的是您对 callback 执行 MyObject 的所有处理的疑虑的答案:基本上没有其他方法可以做到这一点,因为提供 MyObjectB 的线程启动,并且控制只能从该方法向外流动。如果您希望处理跳转到主线程,您将需要一个涉及阻塞队列的更复杂的方案。

关于java - 如何正确使用回调?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16834729/

相关文章:

java - 删除数组的相邻元素

java - 如何扩充子类的构造函数?

java - JApplet 使用的线程分割

使用 masonry 插件的 Jquery 回调

javascript - 在回调函数中传递参数的简单说明

javascript - 如果失败, Angular 回调 api 添加错误消息

java - Spring Boot 将云网关与 Oauth2 结合使用

java - 如何从 IF 语句的结果声明字符串?

c - gdb - 你能找到持有内部 glibc 锁的线程吗?

c# - 根据以下场景,分配线程最有效的方法是什么?