小编mwh*_*den的帖子

具有0超时的future.get的行为

任何人都可以向我指出一些文档,明确表示超时为0的'Future.get`不会等待吗?

API文档for java.util.concurrent.Future没有明确表达的行为future.get(0, unit).站在自己的立场,"如果有必要在最多的时间内等待......"意味着这种调用根本不会等待,但考虑到Object.wait(0)(无限等待)的长期行为,我很紧张依赖一种"无需等待"的行为future.get(0, unit)

扫描一些JDK提供的类的源(即).FutureTask我发现Future当超时为0时,这个特定的实现不会等待.

我想能说

   long timeout = Math.max(until - now, 0);
   return future.get(timeout, TimeUnit.MILLISECONDS);
Run Code Online (Sandbox Code Playgroud)

但我很担心未来实现这是一个无限的等待,所以相反,我已经按照我希望它的工作方式明确编码:

   long timeout = Math.max(until - now, 0);
   if(timeout > 0 || future.isDone()){
      return future.get(timeout, TimeUnit.MILLISECONDS);
   } else {
      throw TimeoutException();
   }
Run Code Online (Sandbox Code Playgroud)

java multithreading future

15
推荐指数
2
解决办法
4159
查看次数

标签 统计

future ×1

java ×1

multithreading ×1