gpt4 book ai didi

Java 程序不干净地存在。创造僵尸

转载 作者:可可西里 更新时间:2023-11-01 02:42:58 24 4
gpt4 key购买 nike

场景

我有一个 java 应用程序(使用 Spring Integration 监听 TCP/IP 端口)。我正在使用一些工作线程和一个由 java.util.concurrent.Executors 工厂创建的 ExecuterService。主线程创建工作线程并在循环中等待,如下所示

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

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

问题
该程序在我的机器 (Windows 7) 上没有成功终止。它留下一个线程监听 tcp 端口,此后进程变得无法访问。我无法从任务管理器中终止此进程并收到“访问被拒绝”错误。

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

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

该应用程序完美运行了好几个月,直到不幸的是我最近因为其他原因不得不重新格式化我的电脑。重新格式化后问题又回来了。

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

知道我的设置有什么问题吗?

最佳答案

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

关于Java 程序不干净地存在。创造僵尸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13659941/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com