我们有一个用Java编写的RMI客户端应用程序,它需要向服务器应用程序定期发送“保持 Activity ”消息。我们已将其实现为单独的心跳线程,该线程将保持 Activity 状态消息发送到服务器,然后使用Thread.sleep()睡眠15秒。

线程被设置为高优先级:

Thread heartbeatThread = new Thread(new HeartbeatRunnable(server));
heartbeatThread.setPriority(Thread.MAX_PRIORITY);
heartbeatThread.start();

但是,当运行客户端的设备使用大量CPU时,我们发现心跳丢失了,这导致服务器假定客户端应用程序已死。

我们没有在主线程中添加Thread.yield()调用,尽管这并未使问题消失。

有什么方法可以保证在我的应用程序仍在运行时及时发送心跳?

最佳答案

通过在代码中自由地散布自写的“yield”函数,可以在非线程环境中实现用户模式线程。

同样,您可以在代码中自由分散心跳检查函数调用。放弃线程,只需定期调用心跳函数即可检查是否需要发送心跳。

这是一个粗略的解决方案,但是鉴于您已经尝试了正确的解决方案,但它不起作用,也许这是您必须回头的事情。

实际上,您可以做的是在每个函数调用的开始处放置一个宏,该宏会快速检查时间,并在必要时调用心跳函数。

(啊,你在Java中有宏吗?我想不是-但是你明白了)。

关于java - 如何保证发送“保持活跃”的心跳?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/676812/

10-10 10:54