我有一些受时间限制的任务。任务是对服务器的请求,结果是响应。时间大约是10毫秒。时间结束后,我希望立即(或在2-5毫秒内)或null接收结果。因此,我将我的任务打包为可调用的,并天真地希望带有超时的Future.get()在超时到达后立即抛出异常。但是,正如我所看到的,带有超时值的Future.get()不能提供这样的精度。在我的简单测试中,它有12毫秒的偏差,而且没有高负载。现在我知道这是未来的正常行为。但我的任务还在那里,如果能有更精确的超时,那就太好了。我听说过Java实时系统,但对我来说,它似乎是非常复杂的工具。对于Future.get()和alternatives系统有什么简单的替代方案吗?
发布于 2014-04-21 15:07:36
您是否考虑过将时间记录在用于调用请求的同一个线程中?您可以从底层线程抛出异常,当调用Future.get()时,将在那里抛出这些异常。
我不确定您是否熟悉非阻塞-io,但是这样您就不需要阻止从流中读取并继续计算(即记录操作所需的时间)。
编辑:
*包是一个使用jse1.7及更高版本的非阻塞io包。下面是一个使用它的基本示例的链接:
http://www.studytrails.com/java-io/non-blocking-io-multiplexing.jsp
https://stackoverflow.com/questions/23199820
复制相似问题