



全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
上一篇介绍了几个核心的接口,这一篇主要介绍实现这些接口的抽象基类。首先是实现IoService接口的AbstractIoService类。它包含了一个Executor来处理到来的事件。每个AbstractIoService都一个AtomicInteger类型的id号,确保每个id的唯一性。它内部的Executor可以选择是从外部传递进构造函数中,也可以在实例内部自行构造,若是后者,则它将是ThreadPoolExecutor类的一个实例,即是Executor线程池中的一员。代码如下:if(executor=null)this.executor=Executors.newCachedThreadPool();createdExecutor=true;elsethis.executor=executor;createdExecutor=false; 其中有一个IdleStatusChecker成员,它用来对服务的空闲状态进行检查,在一个服务激活时会将服务纳入到检查名单中,而在服务失效时会将服务从名单中剔除。会单独开一个线程进行具体的空闲检查,这是通过下面这个线程类来负责的:privateclassNotifyingTaskImplimplementsNotifyingTaskprivatevolatilebooleancancelled;/取消检查标志privatevolatileThreadthread;publicvoidrun()thread=Thread.currentThread();trywhile(!cancelled)/每隔1秒检查一次空闲状态longcurrentTime=System.currentTimeMillis();notifyServices(currentTime);notifySessions(currentTime);tryThread.sleep(1000);catch(InterruptedExceptione)/willexittheloopifinterruptedfrominterrupt()Finallythread=null;具体的空闲检查代码如下,超过能容忍的最大空闲时间,就会fire出SessionIdle事件,上文也说过空闲有三种类型:读端空,写端空,双端空。notifyIdleSession1(s,currentTime,s.getConfig().getIdleTimeInMillis(IdleStatus.BOTH_IDLE),IdleStatus.BOTH_IDLE,Math.max(s.getLastIoTime(),s.getLastIdleTime(IdleStatus.BOTH_IDLE);privatestaticvoidnotifyIdleSession1(AbstractIoSessionsession,longcurrentTime,longidleTime,IdleStatusstatus,longlastIoTime)if(idleTime0&lastIoTime!=0¤tTime-lastIoTime=idleTime)session.getFilterChain().fireSessionIdle(status);在释放资源的方法时,首先去获取释放锁disposalLock才行,然后具体的释放动作是通过dispose0完成的,接着取消掉空闲检查线程,此外,若线程是内部创建的线程池中的一员,则通过线程池去关闭线程。publicfinalvoiddispose()IoFuturedisposalFuture;synchronized(disposalLock)/获取释放锁disposalFuture=this.disposalFuture;if(!disposing)disposing=true;trythis.disposalFuture=disposalFuture=dispose0();/具体释放动作catch(Exceptione)ExceptionMonitor.getInstance().exceptionCaught(e);finallyif(disposalFuture=null)disposed=true;idleStatusChecker.getNotifyingTask().cancel();if(disposalFuture!=null)/无中断地等待释放动作完成disposalFuture.awaitUninterruptibly();if(createdExecutor)通过线程池去关闭线程ExecutorServicee=(ExecutorService)executor;e.shutdown();while(!e.isTerminated()trye.awaitTermination(Integer.MAX_VALUE,TimeUnit.SECONDS);catch(InterruptedExceptione1)/Ignore;itshouldendshortly.disposed=true;再来看会话初始化完成后的动作每个session都保持有自己的属性映射图,在会话结束初始化时,应该设置这个AttributeMap。(AbstractIoSession)session).setAttributeMap(session.getService().getSessionDataStructureFactory().getAttributeMap(session);除此以为,还应该为会话配置写请求队列:(AbstractIoSession)session).setWriteRequestQueue(session.getService().getSessionDataStructureFactory().getWriteRequestQueue(session);在初始化时会在会话的属性中加入一项SESSION_CREATED_FUTURE,这个属性会在连接真正建立后从会话中去除。if(future!=null&futureinstanceofC
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年MVR蒸汽机械行业当前发展趋势与投资机遇洞察报告
- 收营员基础知识培训总结课件
- 2025年网络安全及信息安全防护基础知识考试题与答案
- 2025年广东省网格员招聘考试题库及答案解析
- 2025年建筑三类人员岗位职业技能资格知识考试题库(附含答案)
- 2025年氧化工艺实操考试题带答案
- 2025年跨境电商岗位职业理论及技能资格知识考试题与答案
- 2025年幼师考试《幼儿综合素质》试题及答案
- 2024年上海市浦东新区高东镇先锋社区工作人员考试模拟试题及答案
- 摔跤讲解课件
- 2024年装修合同示范文本
- 关于供应室课件
- 传媒公司会场服务方案
- 电影企业管理会计体系构建
- 职校开学第一课课件:谁说职业没前途
- 铝合金模板施工施工方法及工艺要求
- 2024年国家电网公司华中分部招聘历年(高频重点提升专题训练)共500题附带答案详解
- 大型医院巡查经济管理部分巡查内容
- 2021-2022学年北京市海淀区九年级上期末数学试卷及答案解析
- (高清版)DZT 0388-2021 矿区地下水监测规范
- 《医德医风培训》课件
评论
0/150
提交评论