C#多线程编程(一)

来源:互联网 发布:淘宝注册商标 编辑:程序博客网 时间:2024/04/29 04:33

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都是一样的。



原创粉丝点击