因为新建线程开销较大,所以希望能对线程回收利用(一个线程执行任务后重新利用)
class Data
{
string data;
public Data(string d)
{
data = d;
}
public void Work()
{
Console.WriteLine("ok " + data);
}
}
Data d1=new Data("A");
Data d2=new Data("B");
Thread t = new Thread(d1.Work);
t.Start();
请问,如何才能使创建的线程对象执行d1的任务后,再去执行d2的任务(再次利用t所指对象去执行)???
感觉完全没必考考虑你说的再次利用t所指对象去执行?
不知道你说的意思是不是还是用原来的线程去执行接下来的任务,如果是这个的意思的吧,你可以用Task 的回调或者用 委托的beginInvoke的回调,我记得的回调里的任务是用的同一个线程去执行的。。
你可以用ThreadPool.ququeworkitem(),这个方法你不用管线程,直接把任务丢给线程池,让系统去维护这些线程,也可以Task.Run();或者new task();
线程太多,效果可能适得其反。你可以把所有任务加入到一个List中,然后开一定量的线程,然后同步锁住List,每次获取List[0]后,再把这个任务从List移除,然后交给线程去执行,下面是伪代码
var task=null; while(taskStatus){ lock(lockThread){ if(taskList.Count<1){ break; } task=taskList[0]; taskList.RemoveAt(0); } //执行task任务 } taskStatus //全局的线程状态 lockThread //同步锁