java – 我怎样才能保证发送“保持活着”的心跳?

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

线程设置为高优先级:

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

但是,当运行客户端的框使用大量CPU时,我们发现错过了心跳,这导致服务器认为我们的客户端应用程序已经死亡.

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

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

解决方法:

您可以通过在代码中*散布自编“yield”函数,在非线程环境中实现用户模式线程.

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

这是一个粗糙的解决方案,但鉴于你已经尝试了正确的解决方案并且它不起作用,也许这是你必须回归的东西.

实际上你可以做的是在每个函数调用的开头放置一个宏,它会快速检查时间并在必要时调用心跳功能.

(啊,你有Java的宏吗?我想不是 – 但你明白了).

上一篇:sql 修改字段小记


下一篇:java – rmi注册表绑定问题