CompletableFuture在超时后,能够停止执行吗?

简介: CompletableFuture在超时后,能够停止执行吗?

沉默可能产生误解,我需要说话,说话将我推向歧途,我必须沉默。赫塔·米勒——《国王鞠躬,国王杀人》

好问题,尝试一下

import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
import java.util.stream.Stream;
class Scratch {
    public static void main(String[] args) throws ExecutionException, InterruptedException, TimeoutException {
        CompletableFuture.runAsync(() -> Stream.generate(Object::new).forEach(System.out::println)).get(2, TimeUnit.SECONDS);
        Thread.currentThread().join();
    }
}


发现两秒后断开了

那我们try下异常

import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
import java.util.stream.Stream;
class Scratch {
    public static void main(String[] args) throws ExecutionException, InterruptedException, TimeoutException {
        try {
            CompletableFuture.runAsync(() -> Stream.generate(Object::new).forEach(System.out::println)).get(2, TimeUnit.SECONDS);
        } catch (TimeoutException e) {
            System.err.println("Timeout");
        }
        Thread.currentThread().join();
    }
}

并没有断开,仍然在执行

因此,CompletableFuture的异步任务如果超时异常try掉了,是不会停止执行的

相关文章
|
7月前
|
监控 Java
ThreadPoolExecutor 线程执行超时,释放线程
ThreadPoolExecutor 线程执行超时,释放线程
212 1
|
Java 数据库连接
【线程池使用完毕为何必须shutdown】
【线程池使用完毕为何必须shutdown】
287 0
|
10月前
|
Java
主线程等待子线程执行完毕再执行的几种方式
主线程等待子线程执行完毕再执行的几种方式
210 0
|
10月前
|
Java
使用线程池异步执行
使用线程池异步执行
50 0
主线程等待子线程执行完毕再执行方法
主线程等待子线程执行完毕再执行方法
210 0
如何停止一个正在运行的线程
如何停止一个正在运行的线程
116 1
|
消息中间件 前端开发 NoSQL
如何判断线程池任务执行完?
如何判断线程池任务执行完?
259 0
如何判断线程池任务执行完?
|
Java
Java并发计算判断线程池中的线程是否全部执行完毕
Java并发计算判断线程池中的线程是否全部执行完毕
126 0
|
Java
Java终止与暂停线程
Java终止与暂停线程
111 0
|
消息中间件 JavaScript 小程序
线程池执行的用户任务抛出异常会怎样
线程池执行的用户任务抛出异常会怎样