Mina2.0框架源码剖析(二)

Mina2.0框架源码剖析(二)

ID:38261791

大小:15.14 KB

页数:4页

时间:2019-06-07

Mina2.0框架源码剖析(二)_第1页
Mina2.0框架源码剖析(二)_第2页
Mina2.0框架源码剖析(二)_第3页
Mina2.0框架源码剖析(二)_第4页
资源描述:

《Mina2.0框架源码剖析(二)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、上一篇介绍了几个核心的接口,这一篇主要介绍实现这些接口的抽象基类。首先是实现IoService接口的AbstractIoService类。它包含了一个Executor来处理到来的事件。每个AbstractIoService都一个AtomicInteger类型的id号,确保每个id的唯一性。它内部的Executor可以选择是从外部传递进构造函数中,也可以在实例内部自行构造,若是后者,则它将是ThreadPoolExecutor类的一个实例,即是Executor线程池中的一员。代码如下:     if (execut

2、or == null)         {            this.executor = Executors.newCachedThreadPool();            createdExecutor = true;        }         else         {            this.executor = executor;            createdExecutor = false;        }     其中有一个IdleStatusChecker成员

3、,它用来对服务的空闲状态进行检查,在一个服务激活时会将服务纳入到检查名单中,而在服务失效时会将服务从名单中剔除。会单独开一个线程进行具体的空闲检查,这是通过下面这个线程类来负责的:private class NotifyingTaskImpl implements NotifyingTask {        private volatile boolean cancelled;//取消检查标志        private volatile Thread thread;        public void r

4、un(){            thread = Thread.currentThread();            try {                while (!cancelled) {                    //每隔1秒检查一次空闲状态                    long currentTime = System.currentTimeMillis();                    notifyServices(currentTime);         

5、           notifySessions(currentTime);                    try {                        Thread.sleep(1000);                    } catch (InterruptedException e) {                        // will exit the loop if interrupted from interrupt()                    }

6、                }            } Finally {                thread = null;            }        }}具体的空闲检查代码如下,超过能容忍的最大空闲时间,就会fire出SessionIdle事件,上文也说过空闲有三种类型:读端空,写端空,双端空。notifyIdleSession1(s, currentTime,                s.getConfig().getIdleTimeInMillis(IdleStatus.

7、BOTH_IDLE),IdleStatus.BOTH_IDLE,Math.max(s.getLastIoTime(),s.getLastIdleTime(IdleStatus.BOTH_IDLE)));    private static void notifyIdleSession1(            AbstractIoSession session, long currentTime,            long idleTime, IdleStatus status, long lastIoTi

8、me) {        if (idleTime > 0 && lastIoTime != 0                && currentTime - lastIoTime >= idleTime) {            session.getFilterChain().fireSessionIdle(status);        }}     在释放资源

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。