如何在不使用 Future.get() 的情况下在 Java 中超时 Future,因为它是一个阻塞操作?



我有一个期货列表,我在其中循环检查Future.isDone(),如果是,则使用Future.get()。但是,在某些情况下,线程会永远继续,为了避免这种情况,我想超时。

请帮助我在不使用Future.get()作为阻塞操作的情况下确定未来的时间。在stackoverflow上,大多数关于计时的问题都指向Future.get(),其中有一个超时

如果可以使用CompletableFuture而不是普通的Future,则可以使用CompletableFuture.anyOf()方法:

返回一个新的CompletableFuture,当任何给定的ComplettableFuture完成时,该新的ComplextableFuture将完成,并具有相同的结果。

CompletableFuture<Void> combinedFuture = 
CompletableFuture.anyOf(future1, future2, future3); 
combinedFuture.get();
if (future1.isDone()) { ... }
if (future2.isDone()) { ... }
if (future3.isDone()) { ... }

在Java 9中,您有额外的方法来处理超时,例如CompletableFuture.completeOnTimeout()

相关内容

最新更新