我正在一个具有多个线程的应用程序上工作,每个线程执行的任务彼此不同。还有一个healthMonitor线程,它通过定期发送心跳消息来监视各个线程的运行状况。在这些线程中,有一个线程T1将消息发布到另一个线程T2,以响应T2进行一些文件写入操作。
在极少数情况下,T1会在很长的一段时间内向T2发送大量消息,因此T2忙于文件写入操作。有时,这些文件写入操作可能很耗时,最多需要2秒才能完成。在这种情况下,T2不响应healthMonitor线程发布的心跳消息,从而导致healthMonitor线程终止该应用程序。
T2从同一messageQueue中读取所有传入消息,包括T1发布的消息和healthMonitor线程发布的监听消息。
此问题很少发生,无法随意复制,因此很难调试。
我得出的结论是,在这种情况下,有大量待处理的消息待处理,并且处理时间花费的时间过长,因此心跳消息保持未处理状态的时间过长。由于这个线程,T2不能及时响应healthMonitor线程。
我的问题是,处理此问题的正确方法是什么。我想到的几个选择: