Java线程意外停止

时间:2016-11-21 19:20:34

标签: java multithreading

晚上好!

我正在尝试使用java和Sockets编写服务器/客户端代码。

发送消息的过程工作正常,但我不知道为什么,在我启动第二个客户端并发送第一个消息后,第一个客户端被卡住并且不再发送消息。

它必须是服务器端问题,因为我已经调试了整个代码,并发现while中的问题,一旦它离开它似乎id不再重新进入。 我的理论是它以某种方式停止了或者迭代器可能停止运作。

你能看看它并给我一些指导吗?已经花了4h这个。

非常感谢!

编辑:因为我被问到我已将代码缩减到我认为是问题的核心。正如我通过调试检查的那样,当退出时,线程会自行停止。

服务器:

new Thread() {
            public void run() {

                String inputLine;
                // Input Thread
                    while ((inputLine = clientSocket.read_str()) != null) {
                        // L'iterator ha de començar des del principi cada cop que que es comença el while
                        Iterator<MySocket> keyIterator = connections.keySet().iterator();
                        while (keyIterator.hasNext()) {
                            MySocket sock = keyIterator.next();
                            sock.write_str(inputLine);
                        }
                    }
                    clientSocket.close();

                    removeUser(clientSocket);
            }
        }.start();

1 个答案:

答案 0 :(得分:0)

我发现了问题,我发现每个线程都使用clientSocket,我认为它可以在不同的clientSockets上工作,但它不是,所以一旦套接字更新,它只能从该套接字写入/读取

愚蠢的解决方案,抱歉浪费时间。

谢谢大家。