Java服务器停止正常工作

Java服务器停止正常工作,java,serversocket,Java,Serversocket,我已经用多线程编程了一个小服务器。 很多小时后(据说目前我无法重现这个问题),服务器停止工作。我的代码看起来像这样 线程2: while(true) { System.out.println("Point 1"); Socket abc = serverSocket.accept(); System.out.println("Point 2"); connection

我已经用多线程编程了一个小服务器。 很多小时后(据说目前我无法重现这个问题),服务器停止工作。我的代码看起来像这样

线程2:

while(true)
{

                System.out.println("Point 1");
                Socket abc = serverSocket.accept();
                System.out.println("Point 2");
                connection = true;
}
Thread1在Thread.sleep(1000)循环中等待,并检查连接是否为真。如果是,则开始工作,否则打印“等待”。如果连接中止,它会将连接设置为false

现在我的主程序连接到服务器。服务器打印 等待 等待 (依此类推,直至建立连接) 第1点 第2点 应该如此

现在,在运行了几个小时之后,我的客户端仍然可以连接,它表示连接已建立(通过clientSocket=newSocket(inetAddress,Integer.parseInt(port))完成);假设此命令成功时连接已建立,无异常)

运行数小时后,Thread1仅打印“等待”、“等待”,无论我与客户机的连接频率如何。 我被它难住了,因为它只有在跑了好几个小时后才会发生。Java版本是 java版本“1.7.0_07” Java(TM)SE运行时环境(build 1.7.0_07-b10) 此版本是否存在任何已知问题或错误在哪里?有没有关于如何重现错误的线索


感谢您的帮助。

如果您不同步对
连接
字段的访问,并且该字段不是
易失性
字段,则Thread1可能看不到Thread2中的
连接
已更改。这就是工作原理。

我终于解决了这个问题。 有了这个代码就足够了

InetAddress inetAddress = InetAddress.getByName("0.0.0.0");
serverSocket = new ServerSocket(39999,0,inetAddress);
我的委托人说是联网的。不需要像这样的代码

Socket neuSocket = serverSocket.accept();

整个线程由于while循环外的catch块而终止。Java有时非常令人困惑。如果线程停止了ServerSocket的声明,那么它就不应该再侦听该套接字。

您是否考虑过进行线程转储或在调试器中运行服务器以获取有关发生了什么的更多信息?现在。问题1是服务器作为开发机器在另一台机器上运行。问题2我没有办法在eclipse调试器中暂停线程,然后向我显示它现在的位置excecute.s。可能吗?如果是这样的话,您能发布一个指向该指令的链接吗?现在我设法用eclipse进行了调试。服务器现在在开发机器上运行。让我们希望问题再次出现,并且我能够调试它。我使用第三个类和atatic方法,形式为public static synchronized void setConnection(布尔连接),以避免jzou建议的情况。但是,即使另一个线程不知道连接现在存在也会有问题,它也不会像应该的那样打印“第1点和第2点”。