如何让2个线程相互通信?

zam*_*amN 7 java multithreading

我目前正在用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();
Run Code Online (Sandbox Code Playgroud)

现在有了上面的示例代码,我希望在键入某些文本时,一个线程与另一个线程交谈.就像是:

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

如果有人能提供帮助,我会非常感激.谢谢!

Luk*_*man 1

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

然后,您将需要一个包含对所有线程的引用的 MessageSender 类实例。如果一个线程想要向所有其他线程发送消息,它将对该全局 MessageSender 对象调用 send(msg),然后依次迭代所有线程并将消息推送到各自的队列(跳过该线程的线程)发件人)。

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