ChannelFuture和Future
netty对Jdk的Future进行了封装,做出了自己的Future,使其拥有更全面的接口。而ChannelFuture是对netty的Future的进一步封装,专门用于Channel的I/O使用。
Channel
https://blog.csdn.net/zero__007/article/details/80949350 Channel和Unsafe
每个Channel有一个ChannelPipeline
ChannelHandlerContext
我发现,AbstractChannelHandlerContext有一个成员变量叫next,或许就是指下一个Handler的ChannelContext。如果是,那是不是每个Handler会被分配不同的ChannelHandlerContext?
volatile
https://www.cnblogs.com/dolphin0520/p/3920373.html
volatile保证可见性和禁止指令重排序。
https://blog.csdn.net/anjxue/article/details/51038466
volatile对于double-check的作用:使new操作立即可见
synchronized关键字是防止多个线程同时执行一段代码,那么就会很影响程序执行效率,而volatile关键字在某些情况下性能要优于synchronized,但是要注意volatile关键字是无法替代synchronized关键字的,因为volatile关键字无法保证操作的原子性。通常来说,使用volatile必须具备以下2个条件:
- 对变量的写操作不依赖于当前值
- 该变量没有包含在具有其他变量的不变式中
https://blog.csdn.net/u012312373/article/details/44983523
内存可见性
happens-before
https://www.cnblogs.com/chenssy/p/6393321.html
double-check
https://blog.csdn.net/wxy941011/article/details/81091118
为处理原版非延迟加载方式瓶颈问题,我们需要对 instance 进行第二次检查,目的是避开过多的同步(因为这里的同步只需在第一次创建实例时才同步,一旦创建成功,以后获取实例时就不需要同获取锁了