Java程序不完全存在。创造僵尸

时间:2012-12-01 13:33:52

标签: java windows-7 spring-integration tcp-ip

SCENARIO

我有一个java应用程序(使用Spring Integration for Listening on TCP / IP port)。 我正在使用一些工作线程与使用java.util.concurrent.Executors工厂创建的ExecuterService。 主线程创建工作线程并在循环中等待如下

while(!shutdownRequested)
{
    try {
         Thread.sleep(2000);
         } catch (InterruptedException e) {
           e.printStackTrace();
         }
}

我有一个关闭挂钩,它会停止执行程序服务并在超时时强制关闭。

问题
该程序无法在我的机器上成功终止(Windows 7)。它使一个线程监听tcp端口,然后该进程变得不可访问。 我无法从任务管理器中删除此进程并获得“拒绝访问”错误。

有趣的是,这个问题只发生在我的机器上,不会影响任何其他Windows 7机器。在所有其他机器上,来自控制台的Control-C始终会成功停止程序。

我过去遇到过这个问题(使用相同的应用程序),重新格式化和重新安装Windows后问题神奇地消失了。 (我知道这有点太多了!)

该应用程序完美运行了好几个月,但不幸的是,由于其他原因我最近不得不重新格式化我的电脑。重新格式化后,问题再次出现。

这非常令人沮丧,因为每次我需要重新启动此应用程序时都必须重新启动Windows,因为它无法绑定到TCP端口,因为该端口上的僵尸进程会变亮。

我的设置可能有什么问题?

1 个答案:

答案 0 :(得分:1)

您可能需要close()套接字。 这将导致套接字抛出SocketException,从而停止阻塞。