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
当然还需要覆盖相应的事件处理方法 如上所示