一个线程如何监视另一个线程?

时间:2020-01-10 18:59:13

标签: java multithreading heartbeat

我试图理解“心跳线”的工作原理(从概念上讲,是这样)。

“线程-A”如何检查“线程-B”的状态(在Java中),并相应地将状态更新到某些服务器(希望线程-B处于活动状态)。线程A将采取什么机制来获取线程B的状态?

1 个答案:

答案 0 :(得分:4)

通常,一个线程只能通过调用isAlive().

来测试另一个线程是否还活着

但是,许多线程可以“处于活动状态”,但处于没有任何用处的状态。为了检测到这一点,您需要让线程发布有关其活动的定期更新。然后,监视线程可以检测到预期活动是否不再发生。

例如,批处理可能在每次处理记录时更新一个共享计数器。另一个线程可以读取此计数器,并且如果一段时间没有增加,则认为该进程已挂起。

在生产系统中,常规解决方案是使用对度量标准库的调用来检测您的过程。该库会将这些信息提供给时间序列数据库收集器。通知和可视化系统将使用时间序列数据库中的数据发送警报或显示图形。

软件建议是不合时宜的,但是该堆栈的一个实例是Micrometer收集度量标准,Prometheus收集和存储度量标准,Grafana显示它们。

>