Java 实现异步转同步的方法

相信大家在项目开发过程中会遇到需要将异步操作转换为同步操作的情况,下面给大家介绍 CompletableFuture 的用法

java 复制代码
package future;

import java.util.Locale;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.TimeUnit;

public class Main {

    public static void costTimeOperation(int a, int b, final Callback callback) {
        Thread thread = new Thread() {
            @Override
            public void run() {
                super.run();
                try {
                    Thread.sleep(2000);
                    callback.onComplete(a+b);
                } catch (Exception e) {
                    System.out.println(e);
                    callback.onError(e);
                }
            }
        };
        thread.start();
    }

    interface Callback {
        void onComplete(int result);
        void onError(Exception e);
    }


    public static void main(String[] args) {
        CompletableFuture<Integer> future = new CompletableFuture<>();
        int a = 1;
        int b = 2;
        costTimeOperation(a, b, new Callback() {
            @Override
            public void onComplete(int result) {
                future.complete(result);
            }

            @Override
            public void onError(Exception e) {
                future.complete(null);
            }
        });
        try {
            System.out.printf(Locale.getDefault(), "Waiting for result of %d+%d...%n", a,b);
            System.out.println(future.get(5000, TimeUnit.MILLISECONDS));
        } catch (Exception e) {
            System.out.println(e);
        }
    }
}
相关推荐
d***95621 天前
springboot接入deepseek深度求索 java
java·spring boot·后端
CoderYanger1 天前
C.滑动窗口-越短越合法/求最长/最大——2958. 最多 K 个重复元素的最长子数组
java·数据结构·算法·leetcode·哈希算法·1024程序员节
洞窝技术1 天前
Redis 4.0 升级至 5.0 实施手册
java·redis
无代码专家1 天前
设备巡检数字化解决方案:构建高效闭环管理体系
java·大数据·人工智能
tanxiaomi1 天前
Redisson分布式锁 和 乐观锁的使用场景
java·分布式·mysql·面试
零匠学堂20251 天前
移动学习系统,如何提升企业培训效果?
java·开发语言·spring boot·学习·音视频
小杨快跑~1 天前
从装饰者到桥接再到工厂:模式组合的艺术
java·开发语言·设计模式
饕餮争锋1 天前
Spring内置的Bean作用域介绍
java·后端·spring
却话巴山夜雨时i1 天前
394. 字符串解码【中等】
java·数据结构·算法·leetcode
张人大 Renda Zhang1 天前
Java 虚拟线程 Virtual Thread:让“每请求一线程”在高并发时代复活
java·jvm·后端·spring·架构·web·虚拟线程