首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从线程获取消息

从线程获取消息
EN

Stack Overflow用户
提问于 2012-10-27 02:27:53
回答 1查看 698关注 0票数 1

在第一类中,具有侦听客户端套接字方法“listen

代码语言:javascript
复制
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语句将退出无限循环。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-27 02:30:37

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

然后,第二个类将处于调用queue.take();的循环中,当消息被添加到队列中时,它将返回每条消息。如果您希望队列中的消息数量不受限制,那么LinkedBlockingQueue是可行的。如果您想限制消息,那么有界队列(如ArrayBlockingQueue )可能更合适。

两个线程需要共享相同的BlockingQueue,因此您需要构造它并将其传递给两个线程,或者将一个名为addMessage(...)的方法放在Second类上,而BlockingQueue将位于Second类的内部。然后,监听程序将调用second.addMessage(...);

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13092404

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档