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

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Mina2.0框架源码剖析(二)

/phinecos/archive/2008/12/03/1347052.html上一篇介绍了几个核心的接口,这一篇主要介绍实现这些接口的抽象基类。首先是实现IoService接口的AbstractIoService类。它包含了一个Executor来处理到来的事件。每个AbstractIoService都一个AtomicInteger类型的id号,确保每个id的唯一性。它内部的Executor可以选择是从外部传递进构造函数中,也可以在实例内部自行构造,若是后者,则它将是ThreadPoolExecutor类的一个实例,即是Executor线程池中的一员。代码如下:?if?(executor?==?null)??{?this.executor?=?Executors.newCachedThreadPool();?createdExecutor?=?true;?}??else??{?this.executor?=?executor;?createdExecutor?=?false;?} 其中有一个IdleStatusChecker成员,它用来对服务的空闲状态进行检查,在一个服务激活时会将服务纳入到检查名单中,而在服务失效时会将服务从名单中剔除。会单独开一个线程进行具体的空闲检查,这是通过下面这个线程类来负责的:private?class?NotifyingTaskImpl?implements?NotifyingTask?{?private?volatile?boolean?cancelled;//取消检查标志?private?volatile?Thread?thread;?public?void?run(){?thread?=?Thread.currentThread();?try?{?while?(!cancelled)?{?//每隔1秒检查一次空闲状态?long?currentTime?=?System.currentTimeMillis();?notifyServices(currentTime);?notifySessions(currentTime);?try?{?Thread.sleep(1000);?}?catch?(InterruptedException?e)?{?//?will?exit?the?loop?if?interrupted?from?interrupt()?}?}?}?Finally?{?thread?=?null;?}?}}具体的空闲检查代码如下,超过能容忍的最大空闲时间,就会fire出SessionIdle事件,上文也说过空闲有三种类型:读端空,写端空,双端空。notifyIdleSession1(s,?currentTime,?s.getConfig().getIdleTimeInMillis(IdleStatus.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?lastIoTime)?{?if?(idleTime??0??lastIoTime?!=?0??currentTime?-?lastIoTime?=?idleTime)?{?session.getFilterChain().fireSessionIdle(status);?}}?在释放资源的方法时,首先去获取释放锁disposalLock才行,然后具体的释放动作是通过dispose0完成的,接着取消掉空闲检查线程,此外,若线程是内部创建的线程池中的一员,则通过线程池去关闭线程。?public?final?void?dispose()?{?IoFuture?disposalFuture;?synchronized?(disposalLock)?{//获取释放锁?disposalFuture?=?this.disposalFuture;?if?(!disposing)?{?disposing?=?true;?try?{?this.disposalFuture?=?disposalFuture?=?dispose0();//具体释放动作?}?catch?(Exception?e)?{?ExceptionMonitor.getInstance().exceptionCaught(e);?}?finally?{?if?(disposalFutu

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档