在第一类中有方法“listen”来监听客户端套接字
public void listen() throws IOException {
while (true) {
socket = this.serverSocket.accept();
DataOutputStream out = new DataOutputStream( socket.getOutputStream() );
this.outputStreams.put(socket, out);
Thread miltiServer;
miltiServer = new Thread() {
@Override
public void run() {
InputStream sin = null;
try {
sin = socket.getInputStream();
ObjectInputStream in = new ObjectInputStream(sin);
message = (AgentData) in.readObject();
} catch (ClassNotFoundException ex) {
} catch (IOException ex) {
}
}
};
miltiServer.start();
}
在第二节课中,我需要读取和分析从客户端套接字收到的消息。我不知道如何获取其他类(class)的消息。我有使用 Callable 接口(interface)的想法,但是如果我使用它,return 语句将从不定式循环中退出。
最佳答案
套接字监听器将消息传递给 Second
的简单方法类(class)是通过 BlockingQueue
。监听器将从套接字输入流中读取并调用 queue.put(...)
将任何消息添加到队列中。
然后第二个类将循环调用 queue.take();
当每条消息添加到队列中时,它将返回该消息。如果您希望无限的消息排队,那么 LinkedBlockingQueue
会工作。如果您想限制消息,则可以使用有界队列,例如 ArrayBlockingQueue
可能更合适。
两个线程需要共享相同的 BlockingQueue
因此您需要构造它并将其传递给两个线程或在 Second
上放置一个方法名为 addMessage(...)
的类和 BlockingQueue
会在你的 Second
里面类(class)。然后监听者会调用 second.addMessage(...);
.
关于java - 从线程中获取消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13092404/