基於番石榴的例子,我見過我一直在尋找優雅的解決方案來解決我的問題。具體來說,我喜歡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)。 –