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的宏吗?我想不是 – 但你明白了). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |