我有一个期货列表,我在其中循环检查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()
。