私が見たグアバの例に基づいて、私は自分の問題に対してエレガントな解決策を探してきました。具体的には、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)のリクエストをオープンしました。 –