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掉了,是不会停止执行的

相关文章
|
4月前
|
监控 Java
ThreadPoolExecutor 线程执行超时,释放线程
ThreadPoolExecutor 线程执行超时,释放线程
182 1
|
Java 数据库连接
【线程池使用完毕为何必须shutdown】
【线程池使用完毕为何必须shutdown】
268 0
|
7月前
|
Java
主线程等待子线程执行完毕再执行的几种方式
主线程等待子线程执行完毕再执行的几种方式
151 0
|
7月前
|
Java
使用线程池异步执行
使用线程池异步执行
41 0
主线程等待子线程执行完毕再执行方法
主线程等待子线程执行完毕再执行方法
196 0
如何停止一个正在运行的线程
如何停止一个正在运行的线程
80 1
|
消息中间件 前端开发 NoSQL
如何判断线程池任务执行完?
如何判断线程池任务执行完?
245 0
如何判断线程池任务执行完?
|
Java
Java并发计算判断线程池中的线程是否全部执行完毕
Java并发计算判断线程池中的线程是否全部执行完毕
103 0
|
安全 Java API
为什么启动线程不直接调用run(),而要调用start(),如果调用两次start()方法会有什么后果
1位工作6年的小伙伴去某里P6一面,被问到这样一道面试题,说,为什么启动一个线程不直接调用run()方法,而要调用start()方法来启动,如果调用两次start()会有什么后果?
121 0
|
Java
36. 说说 如何停止一个正在运行的线程?上
36. 说说 如何停止一个正在运行的线程?上
149 0