基于番石榴的例子,我见过我一直在寻找优雅的解决方案来解决我的问题。具体来说,我喜欢Futures.addCallback(ListenableFuture, FutureCallback)
的工作方式,但我希望能够设置在FutureCallback被调用之前可以过期的时间长度超时。理想情况如果违反超时只会导致FutureCallback的失败情况被调用,那将是非常好的。ListenableFuture,FutureCallback和超时
番石榴有这样的事情吗?是不是建议尝试将超时与回调耦合?
编辑:包括导致我到这一点的代码的例子。很显然,我删除了有意义的位以获得最小的示例。
@Test
public void testFuture()
{
Callable<Boolean> callable = new Callable<Boolean>()
{
@Override
public Boolean call() throws Exception
{
while(true);
}
};
ListenableFuture<Boolean> callableFuture = MoreExecutors.listeningDecorator(Executors.newSingleThreadExecutor()).submit(callable);
Futures.addCallback(callableFuture, new FutureCallback<Boolean>()
{
@Override
public void onFailure(Throwable arg0)
{
System.out.println("onFailure:"+arg0);
}
@Override
public void onSuccess(Boolean arg0)
{
System.out.println("onSuccess:"+arg0);
}
});
try
{
callableFuture.get(1000, TimeUnit.MILLISECONDS);
}catch(Throwable t)
{
System.out.println("catch:"+t);
}
}
此编码将只打印catch:java.util.concurrent.TimeoutException
。
非常感谢。我打开了请求[此处](http://code.google.com/p/guava-libraries/issues/detail?id=1146&thanks=1146&ts=1347504235)。 –