网站做的漂浮为什么不动,黑龙江做网站哪家好,友情链接导航,如何制作自己的链接文章目录 一、EventLoop1、EventLoop2、EventLoopGroup#xff08;1#xff09;处理普通时间和定时任务#xff08;2#xff09;处理IO任务 二、Channel三、FuturePromise四、HandlerPipeline五、ByteBuf 一、EventLoop
1、EventLoop
EventLoop本质是一个单线程… 文章目录 一、EventLoop1、EventLoop2、EventLoopGroup1处理普通时间和定时任务2处理IO任务 二、Channel三、FuturePromise四、HandlerPipeline五、ByteBuf 一、EventLoop
1、EventLoop
EventLoop本质是一个单线程执行器同时维护了一个Selector里面有run方法处理Channel上源源不断地IO事件。
它的继承关系比较复杂
继承自j.u.c.ScheduledExecutorService因此包含了线程池中所有的方法。另一条线是继承自netty自己的OrderedEventExecutor。
package io.netty.channel;import io.netty.util.concurrent.OrderedEventExecutor;public interface EventLoop extends OrderedEventExecutor, EventLoopGroup {EventLoopGroup parent();
}2、EventLoopGroup
EventLoopGroup是一组EventLoopChannel一般会调用EventLoopGroup的register方法来绑定其中一个EventLoop后续这个Channel上的IO事件都由此EventLoop来处理保证了IO事件处理时的线程安全。继承自netty自己的EventLoopGroup:
实现了Iterable接口提供遍历EventLoop的能力。另外提供了next方法获取集合中下一个EventLoop。
1处理普通时间和定时任务
package cn.itcast.netty.c3;import io.netty.channel.DefaultEventLoopGroup;
import io.netty.channel.EventLoopGroup;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.util.NettyRuntime;
import lombok.extern.slf4j.Slf4j;import java.util.concurrent.TimeUnit;Slf4j
public class TestEventLoop {public static void main(String[] args) {// 1. 创建事件循环组EventLoopGroup group new NioEventLoopGroup(2); // io 事件普通任务定时任务
// EventLoopGroup group new DefaultEventLoopGroup(); // 普通任务定时任务// 2. 获取下一个事件循环对象System.out.println(group.next());System.out.println(group.next());System.out.println(group.next());System.out.println(group.next());// 3. 执行普通任务/*group.next().execute(() - {try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}log.debug(ok);});*/// 4. 执行定时任务group.next().scheduleAtFixedRate(() - {log.debug(ok);}, 0, 1, TimeUnit.SECONDS);log.debug(main);}
}
2处理IO任务
二、Channel
三、FuturePromise
四、HandlerPipeline
五、ByteBuf