JVisualVM 线程调查器中的 Keep-Alive-Timer 是什么意思?

bit*_*ver 3 java multithreading timer jvisualvm

在此处输入图片说明

这些 Keep-Alive-Timer 线程在左侧有白色标签,下面没有描述白色标签的含义。我想知道这些 Keep-Alive-Timer 线程是如何创建的以及为什么。

在此处输入图片说明

实际上,我正在使用Timer在我的程序中检查心跳消息。每当心跳到来时,我都会安排一个新的TimerTask,延迟 6 秒。如果没有心跳,TimerTask则触发并发送警报。

And*_*gin 5

Keep-Alive-Thread 负责维护KeepAliveCache, 存储有关使用该Keep-Alive属性的http 连接的信息。如果您至少有一个这样的连接,就会有一个 Keep-Alive-Thread 监视它们。当您关闭所有保持活动的连接时,该线程将被销毁。当您向空缓存添加新的保持活动连接时,JVM 会再次启动该线程。

白色意味着线不再有生命力。如您所见,您的 JVM 不断地创建和销毁该线程。

您似乎正在使用跟踪心跳的计时器任务手动执行相同的工作。6 秒后关闭那些保持活动的连接,JVM 会破坏保持活动的线程。您创建一个新连接,JVM 启动一个新的监视 Keep-Alive-Thread。

如果您Keep-Alive在 http 连接上使用该属性,最好只设置正确的超时时间并让 JVM 完成内务工作。