11-高并发-基础-Future异步回调模式

随着微服务架构的兴起,跨设备调用越来越频繁,一个业务流程,可能调用N次第三方接口,获取N种上游数据。因此,如何高效率地异步去调取这些接口,然后同步的去处理这些接口返回的结果?这是高并发要解决的一个基础问题。

在Netty中,大量使用了异步回调模式。


一、多线程join合并流程

A线程调用线程B的B.join方法,合并B线程。那么,线程A进入阻塞状态,知道B线程执行完成。

join方法的三个重载版本:

  • void join():A线程等待B线程执行结束之后,A线程重新恢复执行。
  • void join(long millis):最长等待时间,超过后。不论B线程是否结束,A线程重新恢复执行。
  • void join(long mills,int nanos):最长等待时间-mills+nanos, 不论B线程是否结束,A线程重新恢复执行。

                       

二、FutureTask异步回调

Callable接口:

  •      Runnable接口是在java多线程中表示线程的业务代码的抽象接口。但是,它的run()是没有返回值的。
  •      java定义了类似接口--Callable接口。代表业务处理的方法是call()。
  •     区别:Callable接口不能作为Tread的target目标。
  •     搭桥:FutrueTask使Callable可以作为Thread的target目标。是对Callable的二次封装。

FutrueTask:

  • 搭桥,FutrueTask类能当做Thread的target目标。
  • 获取,FutrueTask可以获取异步执行结果。
  • 抽象,在java语言中,将FutrueTask的一系列操作抽象出来---Futrue接口。

Futrue接口:

  • 判断:判断并发任务是否执行完成。
  • 获取:获取并发的任务完成后的结果。
  • 取消:取消并发执行中的任务。
  • public interface Future<V> {
                //取消并发任务的执行。
                boolean  cancel(booleanmayInterruptRunning);
                booleanisCancelled();
                //获取并发任务的执行状态。如果任务执行结束,则返回true。
    booleanisCancelled():获取并发任务的取消状态。如果任务完成前被取消,则返回true。
                booleanisDone();
                //获取并发任务执行的结果。注意,这个方法是阻塞性的。如果并发任务没有执行完成,调用此方法的线程会一直阻塞,直到并发任务执行完成。
                V get() throws InterruptedException, ExecutionException;
                //获取并发任务执行的结果。也是阻塞性的,但是会有阻塞的时间限制,如果阻塞时间超过设定的timeout时间,该方法将抛出异常。
                V get(long timeout, TimeUnitunit) throws InterruptedException,
                        ExecutionException, TimeoutException;
            }

     

 FutrueTask深入:

  • private Callable callable;
  • private Object outcome;
  • run()

三、FutrueTask案例---同步回调

  本FutrueTask案例缺点:虽然用了Futrue模式,但是只是能获取异步结果,依然需要等待,依然是阻塞的。

public class JavaFutureDemo {
            public static final int SLEEP_GAP = 500;
            public static String getCurThreadName() {
              return Thread.currentThread().getName();
            }
             
            //第一步,实现了Callable,替代Runnable,实现线程业务-烧水。
            static class Hot
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Netty是一个基于Java的网络应用框架,它提供了一种高效、可扩展的方式来开发网络应用程序。在Netty中,函数是一种常见的处理方式,用于处理异步操作的结果。 在高并发场景下,合理的函数设计可以提高系统的性能和可伸缩性。以下是一些关于Netty高并发合理的函数的介绍: 1. ChannelFutureListener:ChannelFutureListener是一个接口,用于监听I/O操作的结果。通过添加ChannelFutureListener,可以在I/O操作完成后执行相应的逻辑。在高并发场景下,可以使用ChannelFutureListener来处理大量的并发请求,例如在写入操作完成后释放资源或发送响应。 2. Promise和Future:Promise和Future是Netty中用于处理异步操作的接口。Promise表示一个异步操作的结果,而Future表示一个异步操作的凭证。通过Promise和Future,可以实现更加灵活的函数设计,例如在多个异步操作完成后执行某个逻辑。 3. ChannelHandler:ChannelHandler是Netty中用于处理I/O事件的组件。通过实现自定义的ChannelHandler,可以在不同的事件发生时执行相应的函数。在高并发场景下,可以根据具体需求实现自定义的ChannelHandler来处理并发请求,例如进行请求分发、连接管理等。 4. EventLoop:EventLoop是Netty中用于处理事件的线程。每个Channel都会绑定一个EventLoop,用于处理该Channel上的事件。通过合理地使用EventLoop,可以实现高效的事件处理和函数执行。 总结起来,Netty提供了多种处理异步操作的函数机制,可以根据具体需求选择合适的方式来设计高并发的函数。合理的函数设计可以提高系统的性能和可伸缩性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

良之才-小良

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值