netty使用进阶

2016-05-25 11:08:00
admin
原创 198
摘要:netty使用进阶

一、netty使用进阶

GlobalEventExecutor:

1、全局执行事件线程池,GlobalEventExecutor.INSTANCE获取实例;

2、最多只有一个线程,提交任务时自动启动线程;

3、静默期内没有提交任务,自动关闭线程,默认1秒;

4、支持提交立即执行的任务,支持提交定时执行的任务;


DefaultPromise:

1、用于设置成功失败回调,包含一个执行回调线程池;

2、promise完成之后唤醒所有等待线程,然后使用线程池执行所有回调;

3、生成实例:new DefaultPromise(GlobalEventExecutor.INSTANCE)

4、DefaultPromise.addListener(listener),增加一个回调;

5、DefaultPromise.removeListener(listener),删除一个回调;

6、DefaultPromise.await(),等待完成,使用Object.wait()实现,可以被中断;

7、DefaultPromise.awaitUninterruptibly(),等待完成,使用Object.wait()实现,不可以中断;

8、DefaultPromise.sync(),等待完成,promise失败时抛出异常,可以被中断;

9、DefaultPromise.syncUninterruptibly(),等待完成,promise失败时抛出异常,不可以中断;

10、DefaultPromise.get(),调用await,等待完成,成功时返回结果,失败时抛出异常;


SingleThreadIoEventLoop:

1、单线程执行事件线程池,最多只有一个线程提交任务时自动启动线程;

2、SingleThreadIoEventLoop.run(),不断循环:处理IO事件,执行任务队列的任务

3、SingleThreadIoEventLoop.run(),执行任务队列最长时间1秒,避免影响处理IO事件;


线程池相关函数:

1、MultiThreadIoEventLoopGroup.shutdownGracefully(),优雅关闭线程池;

2、MultiThreadIoEventLoopGroup.awaitTermination(timeout,unit),等待线程池终止;

3、MultiThreadIoEventLoopGroup.terminationFuture(),线程池终止异步操作结果;

4、Channel.eventLoop(),返回分配给channel的SingleThreadIoEventLoop;

5、ChannelHandlerContext.executor(),如果不显示设置,默认返回Channel.eventLoop()

6、ThreadExecutorMap.currentExecutor(),返回线程属于哪个EventExecutor,使用线程局部变量实现;


线程池关闭详解:

1、MultiThreadIoEventLoopGroup.shutdownGracefully(),SingleThreadIoEventLoop数组顺序调用shutdownGracefully();

2、MultiThreadIoEventLoopGroup.shutdown(),SingleThreadIoEventLoop数组顺序调用shutdown();

3、SingleThreadIoEventLoop.shutdownGracefully(),线程状态扭转到ST_SHUTTING_DOWN;

4、SingleThreadIoEventLoop.shutdown(),线程状态扭转到ST_SHUTDOWN;

5、SingleThreadIoEventLoop.confirmShutdown():线程在运行中循环调用,判断线程是否需要关闭;

6、SingleThreadIoEventLoop.confirmShutdown()步骤1:state<ST_SHUTTING_DOWN,直接返回false;

7、SingleThreadIoEventLoop.confirmShutdown()步骤2:执行任务队列的任务,或者执行线程关闭的钩子;

8、SingleThreadIoEventLoop.confirmShutdown()步骤3:state>=ST_SHUTDOWN,直接返回true关闭线程;

9、SingleThreadIoEventLoop.confirmShutdown()步骤4:state是否可以从ST_SHUTTING_DOWN扭转到ST_SHUTDOWN;

10、SingleThreadIoEventLoop.shutdownGracefully()包含参数quietPeriod静默期,默认2秒;

11、SingleThreadIoEventLoop.shutdownGracefully()包含参数timeout超时时间,默认15秒;

12、ST_SHUTTING_DOWN扭转到ST_SHUTDOWN:静默期内没有新增任务,返回true关闭线程,

13、ST_SHUTTING_DOWN扭转到ST_SHUTDOWN:关闭时间达到超时时间,返回true关闭线程;

发表评论
评论通过审核之后才会显示。