1.C#支持通过多线程实现并行代码的执行。每一个线程就是一个独立的可执行程序,他可以独立的与其他线程同时执行。多线程编程就可以实现在一个应用程序中使多个任务并列执行。
一、多线程编程:
1.一个C#程序起始于一个由CLR和操作系统创建的单线程(Main线程),并且可以通过创建其他线程来实现多线程编程;
2.一个线程被挂起或等待时,并不消耗CPU资源;
3.一个进程可以理解为就是一个应用程序,一个进程下面可以包含多个线程。进程是完全独立于其他进程的,而线程则与同一应用中的其他线程共享存储区,也就是说,线程间可以对临界资源进行共享;
4.一个C#应用程序可以通过两种方式变为多线程应用程序:其一,明确的创建并且运行附加线程;其二,通过.NET Framework的特性来创建线程,如:线程池,Remoting服务器,ASP.NET应用程序等,这些例子中,均会自动包含多线程编程;
5.一个线程一旦结束,将不能再启动;
6.可以在任意时刻设置线程名字,但是如果名字设置之后在试图改变他,将会抛出一个异常;
7.Join方法:使线程处于等待状态,直到该线程结束或被其他线程打断;
8.一个线程段可以通过线程中断和线程取消两种方法提前释放,这两种方法都必须通过另外一个活动的线程来引发,因为一个等待的线程在处于阻塞的状态时是不能进行任何操作的。中断一个线程只是让他从等待状态中释放出来,并不会使线程结束,除非在中断时没有捕获异常;
9.线程生命周期所处状态图:
一、线程的等待处理:
1.EventWaitHandle提供了两个基类:AutoResetEvent和ManualResetEvent,他们都是从他们的基类(EventWaitHandle)获得全部的功能。唯一的不同是他们的构造函数的参数不同。
static EventWaitHandle wait = new AutoResetEvent(false);
static EventWaitHandle wariHandle = new ManualResetEvent(false);
static void Main(string[] args)
{
Thread thread = new Thread(Waiter);
thread.Start();
Thread.Sleep(5000);
wariHandle.Set();
//wait.Set();
Console.Read();
}
private static void Waiter()
{
Console.WriteLine("等待!");
wariHandle.WaitOne();
/wait.WaitOne();
Console.WriteLine("继续!");
}
以上这个方法会在打印出“等待!”5秒之后再打印出“继续!”。使用AutoResetEvent或ManualResetEvent都是一样的。