CompletabeFuture

简介: CompletabeFuture

怎么获得一个CompletabeFuture

用核心的四个静态方法来创建一个异步任务,不推荐使用 new CompletableFuture() 来创建。如下图所示image.png

image.png

无返回结果调用

//无返回值
public class CompeltableFutureBuildDemo {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
//        CompletableFuture CompletableFuture = new CompletableFuture();//不推荐
        CompletableFuture<Void> voidCompletableFuture = CompletableFuture.runAsync(() -> {
            System.out.println(Thread.currentThread().getName());
            try {
                TimeUnit.MILLISECONDS.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        });
        System.out.println(voidCompletableFuture.get());
    }
}
结果:
ForkJoinPool.commonPool-worker-1(用默认线程池)
null
public class CompeltableFutureBuildDemo {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
//        CompletableFuture CompletableFuture = new CompletableFuture();//不推荐
        ExecutorService threadPool = Executors.newFixedThreadPool(3);
        CompletableFuture<Void> voidCompletableFuture = CompletableFuture.runAsync(() -> {
            System.out.println(Thread.currentThread().getName());
            try {
                TimeUnit.MILLISECONDS.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        },threadPool);
        System.out.println(voidCompletableFuture.get());
    }
}
结果:
pool-1-thread-1(自己的线程池的名称)
null

有返回值的调用

public class CompeltableFutureBuildDemo {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
//        CompletableFuture CompletableFuture = new CompletableFuture();//不推荐
        ExecutorService threadPool = Executors.newFixedThreadPool(3);
        CompletableFuture<String> voidCompletableFuture = CompletableFuture.supplyAsync(() -> {
            System.out.println(Thread.currentThread().getName());
            try {
                TimeUnit.MILLISECONDS.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            return "hello supplyAsync";
        },threadPool);
        System.out.println(voidCompletableFuture.get());
    }
}
运行结果:
pool-1-thread-1 (自己new的线程池)
hello supplyAsync (返回结果)


目录
相关文章
|
开发工具 git
git fetch和 pull的区别
通过这些内容和示例,您可以系统地理解 `git fetch`和 `git pull`的区别,并在实际工作中灵活应用这两个命令,提高版本控制的效率。希望这些内容对您的学习和工作有所帮助。
773 24
|
11月前
|
人工智能 Java API
DeepSeek R1 集成难题完美解决:DeepSeek4j来帮你解决
DeepSeek R1 是一款强大的 AI 模型,但在 Java 生态中集成存在诸多挑战,如思维链丢失、参数限制和流式处理不完善等问题。DeepSeek4j 的出现解决了这些难题,它专为 Java 开发者设计,支持完整思维链保留、流畅的流式响应和简单优雅的 API。通过与 Spring Boot 的无缝集成,开发者只需几行代码即可快速接入 DeepSeek R1。此外,DeepSeek4j 提供调试页面、性能优化功能(如 GPU 加速和模型缓存),助力开发者高效利用 AI 技术,推动智能化应用落地。
|
存储 移动开发 程序员
Docker部署Dillinger个人文本编辑器
【7月更文挑战第6天】Docker部署Dillinger个人文本编辑器
618 2
|
JavaScript
使用Vue+Textarea实现在文本内容变化时自适应高度
这篇文章提供了Vue 2和Vue 3中实现Textarea在文本内容变化时自适应高度的示例代码和方法。
1209 0
使用Vue+Textarea实现在文本内容变化时自适应高度
|
测试技术 持续交付 数据处理
Python动态类型深度解析与实践
Python动态类型深度解析与实践
740 1
QML 界面切换的方法
QML 界面切换的方法
1066 1
|
前端开发 NoSQL Java
毕业设计|springboot+h5的购物商城系统(一)
毕业设计|springboot+h5的购物商城系统
439 2
|
Java 测试技术 Maven
单元测试运行原理探究
单元测试是软件开发过程中的重要一环,好的单测可以帮助我们更早的发现问题,为系统的稳定运行提供保障。单测还是很好的说明文档,我们往往看单测用例就能够了解到作者对类的设计意图。代码重构时也离不开单测,丰富的单测用例会使我们重构代码时信心满满。
单元测试运行原理探究
|
数据可视化 前端开发 JavaScript
react+datav+echarts实现可视化数据大屏
最近有点闲,就学习了下react,没想到就把react学完了,觉得还不错,就打算出一把react+datav的简易版可视化数据大屏供大家做个参考
1747 2
react+datav+echarts实现可视化数据大屏
|
传感器 存储 编解码
Baumer工业相机堡盟工业相机如何联合BGAPI SDK和OpenCV实现Mono12和Mono16格式位深度的图像保存(C++)
Baumer工业相机堡盟工业相机如何联合BGAPI SDK和OpenCV实现Mono12和Mono16格式位深度的图像保存(C++)
443 0