【发布时间】:2012-12-01 13:33:52
【问题描述】:
场景
我有一个 java 应用程序(使用 Spring Integration 侦听 TCP/IP 端口)。 我正在使用一些工作线程和用 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 端口,因为僵尸进程在该端口上 litening。
任何想法我的设置可能有什么问题?
【问题讨论】:
-
我会确保您拥有 Windows 的最新更新,因为这似乎是一个操作系统错误。
-
感谢 Peter 的建议,但 Windows 安装与我公司使用的标准映像相同,其他人没有遇到此问题!我也尝试将我的 java 更新到最新版本。
标签: java windows-7 spring-integration tcp-ip