package ALBasicServer.ALServerSynTask; import ALBasicCommon._AALBasicThread; import ALBasicServer.ALBasicServerConf; import ALBasicServer.ALTask._IALSynTask; import ALBasicServer.ALThread.ALThreadManager; import ALBasicServer.ALThread.ALThreadMutexMgr; import ALServerLog.ALServerLog; public class ALSynTaskDealThread extends _AALBasicThread { /** 本线程对应锁信息的存储结构体 */ private ALThreadMutexMgr _m_tmrThreadMutexMgr; /** 线程是否退出 */ private boolean _m_bThreadExit; public ALSynTaskDealThread() { _m_tmrThreadMutexMgr = null; _m_bThreadExit = false; } public void exitThread() { _m_bThreadExit = true; } /****************** * 线程执行函数 * * @author alzq.z * @time Feb 20, 2013 11:05:54 PM */ @Override protected void _run() { if(ALBasicServerConf.getInstance().getCheckMutex()) { //获得当前线程ID long threadID = Thread.currentThread().getId(); _m_tmrThreadMutexMgr = ALThreadManager.getInstance().regThread(threadID); //注册失败直接返回,不进行线程体操作 if(null == _m_tmrThreadMutexMgr) return ; } while(!_m_bThreadExit) { //执行任务循环 //获取当前需要执行的任务,无任务时将等待信号量 _IALSynTask curTask = ALSynTaskManager.getInstance().popCurrentTask(); if(null != curTask) { try { //执行对应任务 curTask.run(); } catch (Exception e) { ALServerLog.Error(curTask.getClass().getName() + " Error!!"); e.printStackTrace(); //当有进行锁检测时需要尝试释放所有注册锁,避免异常的操作导致锁未释放 if(ALBasicServerConf.getInstance().getCheckMutex()) _m_tmrThreadMutexMgr.releaseAllMutex(); } //在任务正常或异常执行完后都需要对锁的释放情况进行判断 if(ALBasicServerConf.getInstance().getCheckMutex()) { if(!_m_tmrThreadMutexMgr.judgeAllMutexRelease()) { //有部分锁未释放 ALServerLog.Error(curTask.getClass().getName() + " have some mutexs are not released !"); _m_tmrThreadMutexMgr.releaseAllMutex(); } } } } } }