5种必会的Java异步调用转同步的方法你会几种?

本文介绍了5种将Java异步调用转换为同步的方法:1) 使用wait和notify,2) 使用条件锁,3) 通过Future,4) 利用CountDownLatch,5) 使用CyclicBarrier。每种方法都结合代码示例详细解释了其工作原理和使用场景,帮助开发者理解如何在Java中优雅地处理异步调用的同步问题。
摘要由CSDN通过智能技术生成

5种必会的Java异步调用转同步的方法你会几种?

异步和同步的理解:

同步调用:调用方在调用过程中,持续等待返回结果。

异步调用:调用方在调用过程中,不直接等待返回结果,而是执行其他任务,结果返回形式通常为回调函数。

Java如何将异步调用转为同步。

换句话说,就是需要在异步调用过程中,持续阻塞至获得调用结果。

先列出五种方法,然后一一举例说明:

1)、使用wait和notify方法
2)、使用条件锁
3)、Future
4)、使用CountDownLatch
5)、使用CyclicBarrier

0.构造一个异步调用

构造一个异步调用模型。

异步调用类:

public class AsyncCall {

private Random random = new Random(System.currentTimeMillis());

private ExecutorService tp = Executors.newSingleThreadExecutor();

//demo1,2,4,5调用方法
public void call(BaseDemo demo){

    new Thread(()->{
        long res = random.nextInt(10);

        try {
            Thread.sleep(res*1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        demo.callback(res);
    }).start();


}

//demo3调用方法
public Future<Long> futureCall(){

    return tp.submit(()-> {
             long res = random.nextInt(10);
        try {
             Thread.sleep(res*1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return res;
    });

}

public void shutdown(){
    tp.shutdown();
}

}

我们主要关心call方法,这个方法接收了一个demo参数,并且开启了一个线程,在线程中执行具体的任务,
并利用demo的callback方法进行回调函数的调用。

大家注意到了这里的返回结果就是一个[0,10)的长整型,

并且结果是几,就让线程sleep多久——这主要是为了更好地观察实验结果,模拟异步调用过程中的处理时间。

至于futureCall和shutdown方法,以及线程池tp都是为了demo3利用Future来实现做准备的。

dem

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值