c# 多线程(一) 多线程的认识

程序是由线程组成,线程是程序中的一个执行流,每个程序最少有一个线程组成。一个程序由多个线程组成,称为多线程。

 

假设:公园的湖中只有一条船,船上每次只能坐一个人出去游览一圈,这条船就好像电脑的CPU,而让每个乘客坐船坐到尽兴被看作是一条完整线程,对于未尽兴的坐完一圈继续排队。游船有规定老弱病残的优先坐船,这就形成了线程的优先级。而游客有的坐两圈则尽兴,有的坐一百圈还未尽兴,这就形成了线程对CPU的占用时间的长短差异。(现实中的线程不会这么文明,是争抢式)

 

多线程的优点:可以提高CPU的利用率,增加客户体验,避免单一操作。

缺点:大量的使用线程增加内存和CPU负担,由于程序中的代码是共享的,所以难以控制,操作比较复杂。

 

下面是一段控制台程序

Private void Display()
{
	…….
}
static void Main(string[] args)
{
    //线程的实例需要一个委托作为参数,ThreadStart委托必须为无参的
     Thread myThread = new Thread(new ThreadStart(Display));
    //设置线程的优先级
     myThread.Priority = ThreadPriority.BelowNormal;
    //启动线程
     myThread.Start();
    //主线程等待状态,直到线程myThread执行结束,主线程接着往下运行。
     myThread.Join();
    //让当前线程睡1秒钟
     Thread.Sleep(1000);
}

当我们使用有参数的委托来实例化线程时:

Private void Display(object obj)
{
	…….
}
static void Main(string[] args)
{
     Thread myThread = new Thread(new ParameterizedThreadStart(Display));
     myThread.Start(55);
}

由于TreadStart(object),在委托的方法中要转变成我们想要的类型。

 

Thread.ThreadState 属性

这个属性代表了线程运行时状态

Aborted:线程已停止;试用后线程不能被唤醒,临时停止线程不使用本方法;
AbortRequested:线程的Thread.Abort()方法已被调用,但是线程还未停止;
Background:线程在后台执行,与属性Thread.IsBackground有关;
Running:线程正在正常运行;
Stopped:线程已经被停止;
StopRequested:线程正在被要求停止;
Suspended:线程已经被挂起(此状态下,可以通过调用Resume()方法重新运行);
SuspendRequested:线程正在要求被挂起,但是未来得及响应;
Unstarted:未调用Thread.Start()开始线程的运行;
WaitSleepJoin:线程因为调用了Wait(),Sleep()Join()等方法处于封锁状态

 

MSDN介绍:

在创建托管线程时,该线程处于 Unstarted状态。线程会保持 Unstarted状态,直到被操作系统转移到已启动状态。调用 Start使操作系统知道该线程可启动,它不更改线程的状态。

进入托管环境的非托管线程已处于已启动状态。一旦处于已启动状态中,就可以执行许多操作来使线程更改状态。下表列出使状态发生更改的操作以及相应的新状态。

一旦线程由于调用 Start而离开 Unstarted状态,那么它将无法再返回到 Unstarted状态。同样,线程也永远无法离开 Stopped状态。

 

线程的优先级

当线程之间争夺CPU时间时,CPU是按照线程的优先级给予服务的。在C#应用程序中,用户可以设定5个不同的优先级,

由高到低分别是HighestAboveNormalNormalBelowNormalLowest,在创建线程时如果不指定优先级,那么系统默认为ThreadPriority.Normal

 

 

注:有些观点紧代表个人,有什么不对的地方欢迎指出,感激不尽,共同进步!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值