本文共 2534 字,大约阅读时间需要 8 分钟。
import java.util.LinkedList;import java.util.List;import java.util.concurrent.ConcurrentHashMap;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.LinkedBlockingQueue;public class EventManager { public static final int Initial_WorkerThread_number = 10; public static final int Max_WorkerThread_number = 100; private static EventManager instance = null; private EventQueue eventQueue = null; private EventRegistry registry = null; private WorkerThreadFactory workerThreadfactory = null; private ExecutorService threadpool = Executors.newCachedThreadPool(); private ListworkerList = new LinkedList (); private CustomEventFactory eventFactory = null; /****************** * 方法 * *****************/ private EventManager() { eventQueue = new EventQueue(); registry = new EventRegistry(); workerThreadfactory = new WorkerThreadFactory(); eventFactory = new CustomEventFactory(); launchWorkerThreads(); } private void launchWorkerThreads() { for( int i=0;i eventQueue = new LinkedBlockingQueue (); public CustomDefineEventBase getEvent() { CustomDefineEventBase event = null; try { event = eventQueue.take(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } return event; } public void putEvent(CustomDefineEventBase event) { try { eventQueue.put(event); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } private class EventRegistry { private ConcurrentHashMap > registry = new ConcurrentHashMap >(); public void register(CustomDefineEventBase event,EventObserver observer) { if( true == registry.containsKey(event.getEventName()) ) { List list = registry.get(event.getEventName()); if( null != list ) { list.add(observer); } } else { List list2Add = new LinkedList (); list2Add.add(observer); registry.put(event.getEventName(), list2Add); } } public void deRegister(CustomDefineEventBase event,EventObserver observer) { if( true == registry.containsKey(event.getEventName()) ) { List list = registry.get(event.getEventName()); if( null != list ) { if( list.size() > 0 ) { list.remove(observer); } else { registry.remove(event.getEventName()); /*如果该事件没有observer,则从注册表中清除*/ } } } } public void doNotify(CustomDefineEventBase event) { List list = registry.get(event.getEventName()); if( null != list ) { for(EventObserver observer:list) { observer.notifyEvent(event); } } } }}
转载地址:http://hvhii.baihongyu.com/