package ALBasicServer.ALServerAsynTask; import java.util.LinkedList; import java.util.concurrent.Semaphore; import java.util.concurrent.locks.ReentrantLock; import ALBasicServer.ALTask._IALAsynCallBackTask; import ALBasicServer.ALTask._IALAsynCallTask; import ALBasicServer.ALTask._IALAsynRunnableTask; /********************** * 异步任务处理线程中存放本线程需要处理的任务队列的对象 * * @author alzq.z * @email zhuangfan@vip.163.com * @time Feb 20, 2013 10:37:01 PM */ @SuppressWarnings("rawtypes") public class ALAsynThreadTaskManager { private Semaphore _m_sSemaphore; private ReentrantLock _m_rMutex; /** 已经排入计划的异步任务处理对象 */ private LinkedList<ALAsynTaskInfo> _m_lAsynTaskList; public ALAsynThreadTaskManager() { _m_sSemaphore = new Semaphore(0); _m_rMutex = new ReentrantLock(); _m_lAsynTaskList = new LinkedList<ALAsynTaskInfo>(); } /*************** * 加入回调类型异步任务处理 * * @author alzq.z * @time Feb 19, 2013 4:09:01 PM */ public <T> void regTask(_IALAsynCallTask<T> _callObj, _IALAsynCallBackTask<T> _callBackObj) { ALAsynTaskInfo<T> info = new ALAsynTaskInfo<T>(_callObj, _callBackObj); _lock(); _m_lAsynTaskList.add(info); _m_sSemaphore.release(); _unlock(); } /***************** * 加入执行类异步任务处理 * * @author alzq.z * @time Feb 19, 2013 4:09:29 PM */ public <T> void regTask(_IALAsynRunnableTask _runTask) { ALAsynTaskInfo<T> info = new ALAsynTaskInfo<T>(_runTask); _lock(); _m_lAsynTaskList.add(info); _m_sSemaphore.release(); _unlock(); } /********************* * 取出第一个需要处理的异步任务对象 * * @author alzq.z * @time Feb 19, 2013 4:09:42 PM */ public ALAsynTaskInfo popFirstAsynTask() { _m_sSemaphore.acquireUninterruptibly(); ALAsynTaskInfo info = null; _lock(); info = _m_lAsynTaskList.remove(0); _unlock(); return info; } protected void _lock() { _m_rMutex.lock(); } protected void _unlock() { _m_rMutex.unlock(); } }