Java 杂谈深入浅出Netty源码剖析Netty技术

【第3篇】Netty回调与Channel执行流程分析

2019-05-13  本文已影响0人  爱学习的蹭蹭

1、Netty的重要Handle类

    protected void channelRead0(ChannelHandlerContext ctx, HttpObject msg) throws Exception {
        //获取地址
        System.out.println(ctx.channel().remoteAddress());
}
SimpleChannelInboundHandler ChannelOutboundHandlerAdapter ChannelHandlerContext

2、 GlobalEventExcecutor类

public final class GlobalEventExecutor extends AbstractScheduledEventExecutor {
   //单例对象
    public static final GlobalEventExecutor INSTANCE = new GlobalEventExecutor();
   //维护的任务队列
    final BlockingQueue<Runnable> taskQueue = new LinkedBlockingQueue<Runnable>();
ScheduledFutureTask.deadlineNanos(SCHEDULE_QUIET_PERIOD_INTERVAL), -SCHEDULE_QUIET_PERIOD_INTERVAL);
    //线程工厂
    final ThreadFactory threadFactory =
            new DefaultThreadFactory(DefaultThreadFactory.toPoolName(getClass()), false, Thread.NORM_PRIORITY, null);
   //一个循环运行的执行器
    private final TaskRunner taskRunner = new TaskRunner();
   //标记当前线程是否启动
    private final AtomicBoolean started = new AtomicBoolean();
   //运行中的线程
    volatile Thread thread;
   
   @Override
    public boolean inEventLoop(Thread thread) {
        return thread == this.thread;
    }
}

判断当前执行代码是否在同一个线程,有两种情况
第一次没有异步线程,则创建新线程
若在非当前运行线程中添加任务,判断异步线程是否在执行,如果没有则创建新的线程(原线程已经执行完毕)

3、DefaultPromise的实现

4、如何检测分布式节点与节点的存活状态

5、什么是解码和加码

上一篇 下一篇

猜你喜欢

热点阅读