csusky

常用链接

统计

最新评论

ExecutorFilter

1 . 用Executors构造一个新的线程池
ExecutorService executor = Executors.newCachedThreadPool();

方法 newCachedThreadPool();
创建一个可根据需要创建新线程的线程池,但是在以前构造的线程可用时将重用它们,并在需要时使用提供的 ThreadFactory 创建新线程。
2. 用构造的线程池创建ExecutorFilter
ExecutorFilter es= new ExecutorFilter(executor));

在ExecutorFilter内部:
只需要将相应的事件分发到到线程池的相应线程即可,但是SessionCreated事件只能在主线程中,不能分发
触发方法
1 .
首先构造一个IoFilterEvent,这个IoFilterEvent包含1、事件的类型,2、下一个过滤器
然后触发该时间的处理方法。
 if (eventTypes.contains(IoEventType.SESSION_OPENED)) {
            fireEvent(
new IoFilterEvent(nextFilter, IoEventType.SESSION_OPENED,
                    session, 
null));
        }

2 .
从线程池中取出一个线程执行事件处理
protected void fireEvent(IoFilterEvent event) {
        getExecutor().execute(event);
    }


在构造ExecutorFilter 时如果没有传入IoEventType则默认只对如下几种几件感兴趣
EXCEPTION_CAUGHT
MESSAGE_RECEIVED
MESSAGE_SENT
SESSION_CLOSED
SESSION_IDLE
SESSION_OPENED
当然还需要覆盖相应的事件处理方法 如上所示

posted on 2008-12-12 11:33 晓宇 阅读(1543) 评论(0)  编辑  收藏 所属分类: JAVA非阻塞编程


只有注册用户登录后才能发表评论。


网站导航: