Future.get()超时精度和可能的替代方案

时间:2014-04-21 14:53:18

标签: java multithreading real-time future

我有一些受时间限制的任务。任务是对服务器的请求,结果是响应。时间大约是10毫秒。在时间结束后,我想立即(或在2-5毫秒内)或null。所以我在Callable中打包了我的任务,天真地希望带有超时的Future.get()会在达到超时后立即抛出异常。但正如我所看到的具有超时的Future.get()无法提供这样的精度。在我的简单测试中,它甚至偏差为12毫秒,并且没有高负载。现在我知道它是Future的正常行为。但我的任务仍然存在,如果有更准确的超时会很棒。我已经听说过Java实时系统,但它对我来说似乎是非常复杂的工具。 Future.get()和Java Real Time System有什么简单的替代方法吗?

1 个答案:

答案 0 :(得分:0)

您是否考虑过在用于调用请求的同一个线程中记录时间?你可以从底层线程抛出异常,当调用Future.get()时,那些异常将被抛出。

我不确定你是否熟悉非阻塞io,但是这样你就不需要阻止来自你的流的读取并继续计算(即记录时间)操作正在进行。)

修改

java.nio。*包是一个非阻塞的io包,可与jse1.7及更高版本一起使用。以下是使用它的基本示例的链接:

http://www.studytrails.com/java-io/non-blocking-io-multiplexing.jsp