Netty ChannelPipeline 中的addFirst和addLast实现
来源:互联网 发布:网络之复仇剑士 编辑:程序博客网 时间:2024/06/14 04:40
在DefaultChannelPipeline中使用双向链表实现addFirst和addLast逻辑
final class DefaultChannelPipeline implements ChannelPipeline { static final InternalLogger logger = InternalLoggerFactory.getInstance(DefaultChannelPipeline.class); @SuppressWarnings("unchecked") private static final WeakHashMap<Class<?>, String>[] nameCaches = new WeakHashMap[Runtime.getRuntime().availableProcessors()]; static { for (int i = 0; i < nameCaches.length; i ++) { nameCaches[i] = new WeakHashMap<Class<?>, String>(); } } final AbstractChannel channel; final AbstractChannelHandlerContext head; final AbstractChannelHandlerContext tail; private final Map<String, AbstractChannelHandlerContext> name2ctx = new HashMap<String, AbstractChannelHandlerContext>(4);
。。。。
}
可以看到AbstractChannelHandlerContext head和tail进入看AbstractChannelHandlerContext :
abstract class AbstractChannelHandlerContext extends DefaultAttributeMap implements ChannelHandlerContext { volatile AbstractChannelHandlerContext next; volatile AbstractChannelHandlerContext prev; private final boolean inbound; private final boolean outbound; private final AbstractChannel channel; private final DefaultChannelPipeline pipeline; private final String name;
。。。。}
可以看到是双向链表结构,并有ChannelHandler的类型标示:boolean inbound, outbound
具体看addFirst和addLast方法源码:
在addFirst中最终调用了addFirst0方法:
private void addFirst0(String name, AbstractChannelHandlerContext newCtx) { checkMultiplicity(newCtx); AbstractChannelHandlerContext nextCtx = head.next; newCtx.prev = head; newCtx.next = nextCtx; head.next = newCtx; nextCtx.prev = newCtx; name2ctx.put(name, newCtx); callHandlerAdded(newCtx);}在addLast中最终调用了addLast0方法:
private void addLast0(final String name, AbstractChannelHandlerContext newCtx) { checkMultiplicity(newCtx); AbstractChannelHandlerContext prev = tail.prev; newCtx.prev = prev; newCtx.next = tail; prev.next = newCtx; tail.prev = newCtx; name2ctx.put(name, newCtx); callHandlerAdded(newCtx);}
0 0
- Netty ChannelPipeline 中的addFirst和addLast实现
- Netty:ChannelPipeline
- Netty in action—ChannelHandler和ChannelPipeline
- Netty实战读书笔记二:ChannelHandler和ChannelPipeline
- Netty(二)ChannelPipeline和ChannelHandler
- Netty学习笔记(三) ChannelPipeline和ChannelHandler
- Netty学习之旅------源码分析ChannelPipeline实现原理
- java netty之ChannelPipeline
- Netty的ChannelPipeline
- 03 netty channelPipeline
- netty-channel-channelPipeline
- Netty教程-ChannelPipeline
- Netty源码分析:ChannelPipeline
- 《Netty in Action》中文版—第六章 ChannelHandler和ChannelPipeline
- [netty核心类]--ChannelPipeline和ChannelHandler源码分析
- netty源码分析之ChannelPipeline
- netty源码分析之ChannelPipeline
- Netty 之 ChannelHandler,ChannelHandlerContext,ChannelPipeline
- mac安装npm
- kernel: INFO: task httpd:31276 blocked for more than 120 sec
- 前端工作3个月小结
- 剑指offer面试题 22 栈的压入、弹出序列的匹配
- javaWeb学习(1)——servlet生命周期
- Netty ChannelPipeline 中的addFirst和addLast实现
- mysql基本操作
- MySQL的读写分离(一)
- mysql语句之group by
- ajax跨域解决方法之一
- POJ 2236 并查集
- 重学 Statistics,Cha12 Tests of Goodness of Fit and Independence
- session401—visual Debugging with xcode
- Android个性导航栏效果