给出了一个非常简化的例子:
Class A {
B b = new B();
}
Class B {
//unicorns and what-not
//Something happens and I want to let A know
//Yet I don't want to return and exit
} 没有套接字,B可以与A通信吗?通过通信,我的意思是B向A发送值,而不调用B上的方法。
编辑:谢谢您的回复。以下是我的跟进问题:
如果我有以下情况,并且由两个B实例同时调用method signal(),这将导致每一个B调用操作发生两次冲突。我能做什么来解决这个问题?
//Modified from Jon Skeet
public class A {
private B b[];
public A() {
//for loop
b[i] = new B(this);
}
public void signal() {
//for loop
b[i].action();
}
}
public class B {
A creator;
public B(A creator) {
this.creator = creator;
}
public void action() {
//stuff
}
public void main(String[] args) {
while(true)
if(something==true) {
creator.signal();
}
}
}发布于 2012-06-26 18:59:17
//独角兽和什么-不是
如果A在构造函数中将自身的实例传递给B,则需要不需要臭独角兽。
class B {
A instantiator;
public B(A inst) { instantiator = inst; }
}
class A {
B b = new B(this);
}编辑(回答后续问题)
如果希望确保signal的多次调用不会同时修改A的状态,则应该使用synchronized关键字保护其关键部分。如果整个方法表示一个关键部分,则可以将synchronized添加到方法的声明中,如下所示:
public synchronized void signal() {
//for loop
b[i].action();
}https://stackoverflow.com/questions/11214152
复制相似问题