首页 > 其他分享 >Netty入门-Future & Promise

Netty入门-Future & Promise

时间:2022-10-24 14:58:00浏览次数:44  
标签:netty log Netty 结果 future Promise public Future

3.3、Future & Promise

Netty中的Future与Jdk中Future同名,但是是两个接口,

继承关系:Promise---extends-->Future(Netty)-----extend--->Future(JDK)

区别:

  • jdk Future 只能同步等待任务结束(或成功、或失败)才能得到结果
  • netty Future 可以同步等待任务结束得到结果,也可以异步方式得到结果,但都是要等任务结束
  • netty Promise 不仅有 netty Future 的功能,而且脱离了任务独立存在,只作为两个线程间传递结果的容器

JDK Future代码

//JDK Future
@Slf4j
public class TestJdkFuture {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        ExecutorService service = Executors.newFixedThreadPool(2);
        Future<Integer> future = service.submit(() -> {
            Thread.sleep(1000);
            return 50;
        });

        //主线程通过future获取结果,阻塞
        log.info("等待结果。。。");
        log.info("结果。。。{}", future.get());
    }
}

Netty Future 代码

@Slf4j
public class TestNettyFuture {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        NioEventLoopGroup group = new NioEventLoopGroup();
        EventLoop eventLoop = group.next();

        Future<Integer> future = eventLoop.submit(() -> {
            log.info("等待结果。。。。");
            Thread.sleep(1000);
            return 100;
        });

        //11:01:46.452 [nioEventLoopGroup-2-1] INFO com.jpy.netty.c2.TestNettyFuture - 等待结果。。。。
		//11:01:47.464 [main] INFO com.jpy.netty.c2.TestNettyFuture - 同步获取结果为:100
        /*//方式1:主线程通过get同步获取结果,阻塞,打印记过是main线程获取结果
        log.info("同步获取结果为:{}", future.get());*/

        
       	//10:54:10.986 [nioEventLoopGroup-2-1] INFO com.jpy.netty.c2.TestNettyFuture - 等待结果。。。。
		//10:54:11.993 [nioEventLoopGroup-2-1] INFO com.jpy.netty.c2.TestNettyFuture - 异步获取结果为:100
        //方式2:异步,打印的结果是nio线程处理
        future.addListener(new GenericFutureListener<Future<? super Integer>>() {
            @Override
            public void operationComplete(Future<? super Integer> future) throws Exception {
                log.info("异步获取结果为:{}",future.getNow());
            }
        });
    }
}

Promise代码

@Slf4j
public class TestNettyPromise {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        EventLoop eventLoop = new NioEventLoopGroup().next();
        DefaultPromise<Integer> promise = new DefaultPromise<>(eventLoop);
        new Thread(() -> {
            try {
                //int i = 1 / 0;
                Thread.sleep(1000);
                //成功的结果填充到promise
                promise.setSuccess(100);
            } catch (Exception e) {
                e.printStackTrace();
                promise.setFailure(e);
            }
        }).start();

        log.info("等待结果、、、");
        //这里至写了同步获取结果的,也可以addListener异步获取
        log.info("结果为:{}",promise.get());
    }
}

标签:netty,log,Netty,结果,future,Promise,public,Future
From: https://www.cnblogs.com/jpymll/p/16821438.html

相关文章

  • Netty入门-Handler & Pipeline
    3.4、Handler&PipelineChannelHandler用来处理Channel上的各种事件,分为入站、出站两种。所有ChannelHandler被连成一串,就是Pipeline入站处理器通常是ChannelIn......
  • Netty入门-Hello World
    Netty入门1、Netty优势NettyVSNIO,工作量大,bug多需要自己构建协议解决TCP传输问题,如黏包,半包epoll空轮询导致cpu100%对API进行增强,ThreadLocal-->FastThreadLocal......
  • vue3引入onMounted后使用onMounted方法后控制台报错分析(Uncaught (in promise) TypeEr
    报错截图报错中已经大致的提示了,onmounted不是一个函数(方法),所以分析是vue没有找到,所以是引入的时候出了问题。Uncaught(inpromise)TypeError:(0,vue_reactivity__WEB......
  • Netty Reactor模型
      1、netty抽象出两个线程池:BossGroup负责监听和建立连接;WorkerGroup负责网络IO的读写2、BossGroup和WorkerGroup类型都是NioEventLoopGroup,相当于一个事件......
  • 【Netty 从成神到升仙系列 大结局】全网一图流死磕解析 Netty 源码
    ......
  • Java异步编程CompletableFuture
    https://blog.csdn.net/zsx_xiaoxin/article/details/123898171 https://blog.csdn.net/qq_31865983/article/details/106137777?spm=1001.2101.3001.6650.9&utm_medium......
  • 随便写一个promise
    functionmyPromise(fn){this.state='Pending'this.valuethis.resolve=function(){if(this.state!='Pending'){return......
  • 序列化器---netty
    packagecn.itcast.protocol;importcom.google.gson.*;importjava.io.*;importjava.lang.reflect.Type;importjava.nio.charset.StandardCharsets;/***用......
  • JavaScript中的Promise
    阮一峰ES6入门Promise1.Promise的介绍Promise是异步编程的一种新的解决方案,从早期的回调函数、事件相比,更加合理和强大。语法上来说,Promise是一个对象,可以获取异......
  • 彻底搞懂Ajax,Promise,Axios
    一、ajaxAJAX:异步JavaScript和XML,用来发送异步请求。有了Ajax之后,在无需重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容。 Ajax是基于现有的Int......