如何让2个线程互相交谈?

我目前正在Java中制作一个IRC僵尸工具(我知道,那里有框架),我试图让它连接到多个服务器。 我遇到的问题不是连接部分,我只是在x个线程中运行Connect类。 每个线程都会将bot连接到指定的服务器/端口。 现在我的问题是,当用户输出某些文本时,机器人应该通知“你输入了这个命令”(例如)。 现在我想让机器人向所有服务器发送消息,告诉你“你输入了这个命令”。 这仅仅是一个例子(这就是为什么它没有多大意义)。

Connect f = new Connect(irc.freenode.net, 6667);
Thread ft = new Thread(f);
ft.start();
Connect q = new Connect(irc.quakenet.org, 6667);
Thread qt = new Thread(q);
qt.start();

现在具有上面的示例代码,当某些文本输入时,我想让一个线程与另一个线程交谈。 就像是:

if (lineReader.substring(lineReader.indexOf(":"), lineReader.length()).equals("hello")) {
    message both servers "Hello World!" 
}

如果有人能帮忙,我会非常感激。 谢谢!


您应该给每个线程一个其他线程可以以异步方式推入的传入消息的队列; java.util.concurrent.ConcurrentLinkedQueue可能是一个很好的类。

然后,您将需要一个MessageSender类实例,它引用了所有线程。 如果一个线程想要向所有其他线程发送一条消息,它会在这个全局MessageSender对象上调用send(msg),然后它将遍历所有线程并将消息推送到它们各自的队列(跳过发送者)。

线程本身可以随时检查自己的队列(取决于它们可能正在执行的任何其他逻辑),并在处理完消息后删除它们。


我认为一个简单的方法是Observer模式,其中每个线程都知道所有其他线程


messagePasser解决方案将无法工作,因为java中的字符串对象是按值传递的,而不是通过引用传递的。

链接地址: http://www.djcxy.com/p/48489.html

上一篇: How to have 2 Threads Talk To Each Other?

下一篇: 2D Vector graphic renderer for OpenGL