加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-15 08:29:42 所属栏目:Java 来源:网络整理
导读:我们有一个用 Java编写的RMI客户端应用程序,需要定期向服务器应用程序发送“保持活动”消息.我们已经将它实现为一个单独的心跳线程,它将保持活动消息发送到服务器,然后使用Thread.sleep()休眠15秒. 线程设置为高优先级: Thread heartbeatThread = new Threa
我们有一个用 Java编写的RMI客户端应用程序,需要定期向服务器应用程序发送“保持活动”消息.我们已经将它实现为一个单独的心跳线程,它将保持活动消息发送到服务器,然后使用Thread.sleep()休眠15秒.

线程设置为高优先级:

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

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

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

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

解决方法

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

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

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读