特殊说明:这个例子不是【C#线程参考手册】的例子,书中的例子对于我来说有些复杂。
在网上找到了一个自定义线程池的例子来代替书中的例子。
原著位置:http://www.cnblogs.com/Alexander-Lee/archive/2009/10/31/1593647.html
1 自定义线程池设计概要说明:
1 TaskPool类(自定义线程池类)
1.1 任务线程在线程队列间切换的顺序
1 定义:private Dictionary<string, Task> Publicpool
说明:所有线程
执行:构造函数初始化线程实例时追加;AddTaskItem内,空闲线程(freequeue)不存在时追加
2 定义:private Queue<Task> freequeue
说明:空闲线程队列
执行:构造函数内,初始化线程实例时追加;AddTaskItem内,空闲线程(freequeue)不存在时追加
3 定义:private Dictionary<string, Task> working
说明:正在工作的线程
执行:AddTaskItem方法内,工作线程追加到working队列内,然后执行工作线程。
4 定义:private Queue<Waititem> waitlist
说明:等待执行工作队列
执行:AddTaskItem方法内,当前线程数=最大线程数时,waitlist队列内工作线程追加。
当每个工作线程结束时,触发WorkComplete事件,【等待执行工作队列】内的工作线程追加到工作的线程队列内。
1.2 工作线程追加到ThreadPool内的方法:
AddTaskItem
2 Task类(线程任务包装类)通过Task构造函数和Active方法来执行working工作线程上的线程。
3 Waititem类(等待队列保存任务方法和任务方法参数的信息)
2 类图如下:
3 代码如下:
TashPool类 (自定义线程池容器类)
Task类 (工作线程包装类)
WaitItem类(等待线程队列包装类)
客户端执行