一、本文的主要介绍内容
主要介绍怎么动态创建若干个线程,并且执行他们。需要注意的是,多个线程执行的时候,可能会比主线程慢结束。意思是,主程序(main函数)结束了,他们却还在执行。为了克服这个问题,我们可以用while语句阻塞主程序,在每个线程执行完毕之后,再继续执行主程序。语句用法是:
//为了确保 Main 函数不会尝试在辅助线程有机会执行结束之前将它终止
//Main 函数将一直循环,直到辅助线程对象的 IsAlive 属性设置为 false
//必须用while,表示线程都已经执行完了
for (int i = 0; i < parts; i++)
{
while (threads[i].IsAlive)
{
;
}
}
注意while里面那个分号是必需的,不要忘记了。
二、如何创建和执行线程
1.创建线程
System.Threading.Thread[] threads = new System.Threading.Thread[parts];
这跟数组创建差不多
2.给每个线程赋值
这跟数组赋值也差不多,但可能比较不好理解。
for (int i = 0; i < parts; i++)
{
string str_l = linkArray[i];
Program p = new Program(str_l);
System.Threading.Thread t = new System.Threading.Thread(new System.Threading.ThreadStart(p.doWork));
threads[i] = t;
threads[i].Name = "Thread" + i.ToString();
}
注意在这个语句中,类Program必须有类似以下的结构:
Class Program
{
//成员变量初始化
..........
public Program(T link)//T指任何类型都可以,或者不带参数也行
{
//初始化;
}
//其他语句
...........
public void doWork()
{
//每个线程需要执行的程序语句内容
}
}
线程执行的函数必须是无返回值无参数的,类似 void dowork()的结构,这点要注意。
3.执行线程
for (int i = 0; i < parts; i++)
{
threads[i].Start();
}
4.阻塞线程,这个要视情况而定,前面已经介绍过了。
该语句简单来写就是 while(thread[i].IsAlive);