netty使用进阶
- 2016-05-25 11:08:00
- admin
- 原创 198
一、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关闭线程;