从线程获取消息

时间:2012-10-26 18:27:53

标签: java multithreading

在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语句将退出不定式循环。

1 个答案:

答案 0 :(得分:2)

套接字监听器将消息传递到Second类的简单方法是BlockingQueue。侦听器将从套接字输入流中读取并调用queue.put(...)以将任何消息添加到队列中。

然后第二个类将在一个循环中调用queue.take();,当它被添加到队列时将返回每个消息。如果您想要无限的消息排队,那么LinkedBlockingQueue将起作用。如果您想限制消息,那么ArrayBlockingQueue这样的有界队列可能更合适。

两个线程都需要共享相同的BlockingQueue,因此您需要构建它并将其传递给两个线程,或者将一个方法放在名为Second之类的addMessage(...)类中。 BlockingQueue将在Second课程内。然后听众会拨打second.addMessage(...);