【发布时间】:2013-05-30 11:15:57
【问题描述】:
我弄乱了一些模式,以使代码更加模块化。所以我有这样的事情:
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,所以如果B 中的Thread 的工作完成,我将使用callback 通知A。但现在我必须将所有逻辑都放在处理MyObject 并在callback 中进行进一步处理。
我能以某种方式避免这种情况吗,或者那是正确的方法吗?
【问题讨论】:
-
为什么要避免这种情况?有什么原因吗?
-
不清楚你想做什么和避免什么。原则上,您的代码是可以接受的,但请记住,A.callback() 是从 B 中的线程调用的,因此如果您想从其他线程访问 A 的字段,例如创建A实例的线程,那么你需要添加一些同步。
-
我要求避免这种情况,因为我的整个程序都依赖于 MyObject。所以所有的工作都必须在那个回调中完成。
标签: java multithreading callback