/// <summary> /// 回收线程 /// </summary> /// <param name="entity"></param> public void StoreThread(QYThreadEntity entity) { if (entity != null)//不信任态度 { lock (this.lockObj){ this.idleThreadList.AddLast(entity); } } }
/// <summary> /// 请求线程 /// </summary> /// <returns></returns> public QYThreadEntity RequestThread() { QYThreadEntity threadEntity = null; lock (this.lockObj){ if (this.idleCount > 0)//如果有空闲线程 { threadEntity = this.idleThreadList.First.Value; this.idleThreadList.RemoveFirst(); } else //如果没有空闲线程 { if (!this.isFullLoad)//如果当前管理器还未满负载 { threadEntity = new QYThreadEntity(); threadEntity.init(); this.runningThreadCount++; } } } return(threadEntity); }
/// <summary> /// 执行线程池工作 /// </summary> public void DoWork() { QYThreadEntity entity = null; Action task = null; lock (this.lockObj){ //每次仅仅提取一个任务出来,有多个任务时,等待下次循环再获取 //避免某个线程池任务堆满了管理器中的可用名额,使得其他线程池无法尽快得到执行的权限这种情况 if (this.taskList.Count > 0) { entity = this.manager.RequestThread(); if (entity != null) { //提取出第一个 task = this.taskList.First.Value; this.taskList.RemoveFirst(); //累加计数器 this.runningThreadCount++; //执行任务 entity.execute(task, () => { lock (this.lockObj){ //回收线程资源 this.manager.StoreThread(entity); //回收一个计数器 this.runningThreadCount--; } //通知有任务变化 this.manager.NotifyWork(); }); } } } }