我在他们自己的线程中创建两个对象
Conversation c = new Conversation();
Thread t1 = new Thread(c);
t1.start();
HunterCom ns = new HunterCom(c);
Thread t2 = new Thread(ns);
t2.start();
我需要发送会话对象(c)对HunterCom对象的引用(ns)
有没有这样做?因为我想将它发送到c时没有创建ns,所以我很难想象。
答案 0 :(得分:3)
听起来你希望c和ns相互引用 - 即c引用ns,ns引用c。
如果这是你要求的,你需要在c中设置一个允许你设置HunterCom对象的setter:
public class Conversation{
void setHunterCom(HunterCom a)...
}
也就是说,如果你有这样的参考周期,它通常表示需要复查的对象模型。如果你将洋葱剥开,你可能会找到一个消除循环参考的重构。这是值得的,因为它将使您的代码更容易在未来的工作。
答案 1 :(得分:0)
一个选项是创建一个可以保留对两者的引用的第三个类:
class ComManager {
// getter and setter for Conversation
// getter and setter for HunterCom
}
然后实例化这个类并将其作为arg传递给两个对象:
ComManager com = new ComManager();
Conversation c = new Conversation(com);
HunterCom ns = new HunterCom(com);
现在,两个对象都引用了com
,它具有Conversation
和HunterCom
的getter方法,可以在每个线程运行时使用。
第二个选项是更改实例化事物的顺序 - 创建Conversation
和HunterCom
,不带参数,然后像这样分配彼此的引用:
Conversation c = new Conversation();
HunterCom ns = new HunterCom();
c.setHunterCom(ns);
ns.setConversation(c);
可能还有其他几个类似的选择;希望这会给你一个起点,找到其他模式,并为你找到你想要的东西。