详解Java中异步转同步的六种方法

本文详细探讨了Java中将异步操作转换为同步的六种方法,包括Future、wait/notify、Lock Condition、CountDownLatch、CyclicBarrier以及LockSupport的使用,分析了它们的工作原理及适用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、问题

         应用场景

二、分析

三、实现方法

   1.轮询与休眠重试机制
   2.wait/notify
   3.Lock Condition
   4.CountDownLatch
   5.CyclicBarrier
   6.LockSupport

一、问题

  应用场景
                如何实现异步转同步?

二、分析

  首先,解释下同步和异步

   同步,就是发出一个调用时,在没有得到结果之前,该调用就不返回或不继续执行后续操作。
   异步,当一个异步过程调用发出后,调用者在没有得到结果之前,就可以继续执行后续操作。
            当这个调用完成后,一般通过状态、通知和回调来通知调用者。

  对于异步调用,调用的返回并不受调用者控制。

  异步转同步主要实现思路:

  所有实现原理类似,是在发出调用的线程中进行阻塞等待结果,调用完成后通过回调、
  设置共享状态或通知进行阻塞状态的解除,继续执行后续操作。

三、实现方法

  通常,实现中,不会无限的等待,一般会设定一个超时时间,具体超时时间根据具体场景确定。

 下面以回调的方式介绍几种常用实现异步转同步的方法:

1.轮询与休眠  重试机制

  采用轮询与休眠重试机制,线程将反复在休眠和测试状态条件中之间切换,直到超时或者状态条件满足继续向下执行。
  
  这种方式,超时时间控制不准确,sleep时间需要在响应性和CPU使用率之间进行权衡。

  private static long MILLIS_OF_WAIT_TIME = 300000L;// 等待时间 5分钟

  private final Object lock = new Object();

  //3.结果返回后进行回调,解除阻塞
 @Override
 public void callback(AsynResponse response){
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值