博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【代码积累】Event handling framrwork
阅读量:4099 次
发布时间:2019-05-25

本文共 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 List
workerList = 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/

你可能感兴趣的文章
数据结构之单链表——C++模板类实现
查看>>
Linux的SOCKET编程 简单演示
查看>>
正则匹配函数
查看>>
Linux并发服务器编程之多线程并发服务器
查看>>
聊聊gcc参数中的-I, -L和-l
查看>>
[C++基础]034_C++模板编程里的主版本模板类、全特化、偏特化(C++ Type Traits)
查看>>
C语言内存检测
查看>>
Linux epoll模型
查看>>
Linux select TCP并发服务器与客户端编程
查看>>
Linux系统编程——线程池
查看>>
基于Visual C++2013拆解世界五百强面试题--题5-自己实现strstr
查看>>
Linux 线程信号量同步
查看>>
C++静态成员函数访问非静态成员的几种方法
查看>>
类中的静态成员函数访问非静态成员变量
查看>>
C++学习之普通函数指针与成员函数指针
查看>>
C++的静态成员函数指针
查看>>
Linux系统编程——线程池
查看>>
yfan.qiu linux硬链接与软链接
查看>>
Linux C++线程池实例
查看>>
shared_ptr简介以及常见问题
查看>>