自定义线程池-c#的简单实现
它由两部分组成,一个线程管理类ThreadManager和一个线程类MyThread Test类,用于测试。
参考了以下信息:
http://tech.ccidnet.com/pub/disp/Article? columnID = 294 & articleID = 33440 & pageNO = 1
http://soft . yesky . com/soft channel/72342371961929728/2004 10 13/1863707 . shtml
下面是代码,希望大家能提出更好的建议:
1.线程管理器. cs
使用系统;
使用系统。穿线;
使用系统。收藏;
命名空间CustomThreadPool
{
///
///线程管理器,它将启动或唤醒一个线程来执行指定的回调方法。
///
公共类线程管理器
{
private static ArrayList threadList = new ArrayList();//线程列表,静态
//不允许创建实例
私有线程管理器()
{
}
///
///静态方法来启动或唤醒线程以执行指定的回调方法。
///
///委托实例
///传递给回调方法的参数
///没有可用线程时的等待时间(毫秒)。
///
公共静态bool QueueUserWorkItem(wait callback wait callback,Object obj,int timeOut)
{
//锁定共享资源,实现线程安全。
锁定(线程列表)
{
尝试
{
//如果线程列表为空,则填充线程列表。
if (threadList。计数== 0)
{
init threadlist();
}
长起始时间=日期时间。现在。滴答;
做
{
//遍历线程列表,找出可用的线程
foreach(threadList中的MyThread myThread)
{
//线程是空,所以需要创建一个线程。
如果(myThread。T == null)
{
流言蜚语。Start(waitCallback,obj,false);
返回true
}
else if (myThread。线程状态==线程状态。暂停)
{//线程挂起,唤醒线程。
流言蜚语。Start(waitCallback,obj,true);
返回true
}
}
//在线程休眠前释放锁
监视器。pulse all(thread list);
线程。睡眠(500);
}while(((日期时间。now . Ticks-start time)/10000)< time out);
}
最后
{
监视器。退出(thread list);
}
}
返回false
}
//用MyThread对象填充线程列表。请注意,此时线程没有启动。
位律师回复
0条评论