安卓8将取消java_如何取消Java 8可完成的未来?

我正在使用Java 8可完成的期货。我有以下代码:

CountDownLatch waitLatch = new CountDownLatch(1);

CompletableFuture> future = CompletableFuture.runAsync(() -> {

try {

System.out.println("Wait");

waitLatch.await(); //cancel should interrupt

System.out.println("Done");

} catch (InterruptedException e) {

System.out.println("Interrupted");

throw new RuntimeException(e);

}

});

sleep(10); //give it some time to start (ugly, but works)

future.cancel(true);

System.out.println("Cancel called");

assertTrue(future.isCancelled());

assertTrue(future.isDone());

sleep(100); //give it some time to finish

我使用runAsync计划执行等待闩锁的代码。接下来,我取消了将来,希望将被中断的异常抛出内部。但是似乎线程在await调用上仍然处于阻塞状态,即使将来被取消(断言通过)也永远不会抛出InterruptedException。使用ExecutorService的等效代码可以正常工作。是CompletableFuture中的错误还是我的示例中的错误?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值