java - 从线程中获取消息

标签 java multithreading

在第一类中有方法“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/

相关文章:

java - 为什么我的图像不会显示在我的布局中?

c# - C#:Thread.Sleep无法正常工作

java - J2ME 按钮命令不起作用

java - Tomcat多线程部署使用ManagerServlet

java - 从 html 生成 pdf

java - android中两种语句的区别

java - 将 KeyListener 与线程一起使用

c++:在多线程程序中写入文件

multithreading - 在 Golang 中实现 "events"(带有通知程序/接收程序)的概念?

C++ 错误类型 'std::thread' 无法解析 Eclipse Mars 4.5,Ubuntu 12.04