mina源码分析五(转)
来源:互联网 发布:java程序设计第十版pdf 编辑:程序博客网 时间:2024/05/18 01:00
前面介绍过IoSessionRecycler是负责回收不再使用的会话的接口,ExpiringSessionRecycler是其一个实现类,用于回收超时失效的会话。
private ExpiringMap<Object, IoSession> sessionMap;//待处理的会话集private ExpiringMap<Object, IoSession>.Expirer mapExpirer;//负责具体的回收工作
sessionMap的键是由本地地址和远端地址共同组成的,值是这两个地址对应的会话。
Expirer类实现了Runnable接口,这个线程负责监控ExpiringMap,并把ExpiringMap中超过阀值的元素从ExpiringMap中移除。这个线程调用了setDaemon(true),因此是作为守护线程在后台运行。具体的处理过程如下:
private void processExpires() { long timeNow = System.currentTimeMillis();//当前时间 for (ExpiringObject o : delegate.values()) { if (timeToLiveMillis <= 0) { continue; } long timeIdle = timeNow - o.getLastAccessTime();//时间差 if (timeIdle >= timeToLiveMillis) {//超时 delegate.remove(o.getKey()); for (ExpirationListener<V> listener : expirationListeners) {//呼叫监听者 listener.expired(o.getValue()); } } } }启动/关闭超时检查线程都需要进行封锁机制,这里使用的是读写锁:
private final ReadWriteLock stateLock = new ReentrantReadWriteLock(); public void startExpiring() { stateLock.writeLock().lock(); try { if (!running) { running = true; expirerThread.start(); } } finally { stateLock.writeLock().unlock(); } } public void stopExpiring() { stateLock.writeLock().lock(); try { if (running) { running = false; expirerThread.interrupt(); } } finally { stateLock.writeLock().unlock(); } }会话超时监听者:
private class DefaultExpirationListener implements ExpirationListener<IoSession> { public void expired(IoSession expiredSession) { expiredSession.close();//关闭超时的会话 } }
0 0
- mina源码分析五(转)
- mina源码分析一(转)
- mina源码分析二(转)
- mina源码分析三(转)
- mina源码分析四(转)
- mina源码分析六(转)
- mina源码分析七(转)
- mina源码分析八(转)
- (五)Mina源码解析之编解码器
- mina源码分析---3
- mina源码分析---4
- MINA 源码分析笔记
- mina源码分析
- Mina源码阅读笔记(五)—Mina对连接的操作IoSession
- Mina源码阅读笔记(五)—Mina对连接的操作IoSession
- Mina源码阅读笔记(五)—Mina对连接的操作IoSession
- Mina源码阅读笔记(五)—Mina对连接的操作IoSession
- 关于MINA服务端源码分析
- UML之用例图
- ARC基础
- 开源项目:Android-PullToRefresh
- android开发中经常遇到的问题汇总
- 关于Android的nodpi,xhdpi,hdpi,mdpi,ldpi
- mina源码分析五(转)
- &怎么区分它是引用,还是取地址符?
- 如何成为一个C++高级程序员
- 软床调查执行设计--调查对象及方法(2)
- java 产生随机字符串
- ios cpu 使用率
- oracle11配置
- UML之类图
- 十个顶级的C语言资源助你成为优秀的程序员