在First类中有方法“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();
}
在第二课中,我需要阅读和分析从客户端套接字收到的消息。我不知道如何在其他课程中获取消息。我有想法使用Callable接口,但如果我使用它,return语句将退出不定式循环。
答案 0 :(得分:2)
套接字监听器将消息传递到Second
类的简单方法是BlockingQueue
。侦听器将从套接字输入流中读取并调用queue.put(...)
以将任何消息添加到队列中。
然后第二个类将在一个循环中调用queue.take();
,当它被添加到队列时将返回每个消息。如果您想要无限的消息排队,那么LinkedBlockingQueue
将起作用。如果您想限制消息,那么ArrayBlockingQueue
这样的有界队列可能更合适。
两个线程都需要共享相同的BlockingQueue
,因此您需要构建它并将其传递给两个线程,或者将一个方法放在名为Second
之类的addMessage(...)
类中。 BlockingQueue
将在Second
课程内。然后听众会拨打second.addMessage(...);
。