c# 多线程
一、基本概念
1、进程:一个程序开始运行时,它就是一个进程。进程包括运行中的程序和程序所使用到的资源。而一个进程是由多个线程组成。
2、线程:线程是一个程序中的一个执行流,每个线程都有自己的专有寄存器(栈指针、程序寄存器等)。但是其程序代码区是共享的,即不同的线程可以执行同样的函数。
3、多线程:指的是程序中包含多个执行流,即在一个程序中可以同时运行多个不同的线程来执行不同的任务。换句话说,就是允许单个程序创造出多个并行执行的线程来完成各自的任务。
4、任何程序在执行时,至少有一个主线程。
5、所有与多线程应用相关的类都放在system.threading命名空间中。
6、在thread类中包含以下几个重要的方法:
start():启动线程;
sleep(int):静态方法,暂停当前线程指定的毫秒数;
abort():终止一个线程;
suspend():挂起线程,以后还可以恢复;
resume():恢复被挂起的线程;
二、简单线程的创建步骤
我们用一个简单的控制台应用程序来作为演示,代码如下图所示:
线程的入口是通过ThreadStart代理(delegate)来提供的,我们可以把ThreadStart理解为一个函数指针,指向线程所要执行的函数。当程序调用Thread.Start()方法后,线程就开始执行ThreadStart所代表或者说指向的函数。
三、线程的优先级
当不同线程之间争夺CPU资源时,CPU是按照线程的优先级来给予服务的。在c#应用程序中,用户可以为线程设定5个不同的优先级级别,由高到低分别为:Highest,AboveNormal,Normal,BelowNormal,Lowest 。
在创建线程时如果不指定优先级,那么体统默认为ThreadPriority.Normal。
给一个线程指定优先级,可以用如下代码:
newthreading.Priority=ThreadPriority.Lowest;
四、带有参数的多线程
1、带有一个参数的情况
利用Thread(ParameterizedThreadStart)初始化Thread类的新实例,指定允许对象在线程启动时传递给线程的委托。
注意:ParameterizedThreadStart要求参数类型必须为object,所以在程序中所定义的方法的形参类型必须为object。
2、带多个参数的情况
由于Thread默认只提供了ThreadStart和ParameterizedThreadStart两种构造函数,所以如果需要传递多个参数,我们可以自己将参数作为类的属性。定义类对象的时候实例化这个属性,然后进行操作。
在上述程序中为了简单我们只设置了一个属性text。在实际操作中,如果想传入多个参数,设置多个属性即可。