.NET下的多线程编—3-Thread.Sleep(0)的意义

  阅读目录

  一:什么是Thread.Sleep?

  二:举例

  三:什么时候用线程?

  四:使用线程的缺点

  一:什么是Thread.Sleep?

    1.Thread.Sleep() 本身的含义是将当前线程挂起指定的时间。

    2. MSDN的说明:指定零 (0) 以指示应挂起此线程以使其他等待线程能够执行。

      Thread.Sleep(0) 并非是真的要线程挂起0毫秒,这样显的毫无意义,意义在于这次调用Thread.Sleep(0)的当前线程被冻结了一下,让其他线程有机会优先执行。 Thread.Sleep(0) 是你的线程暂时放弃CPU,也就是释放一些未用的时间片给其他线程或进程使用,就相当于一个让位动作。我们可以这样理解,其实是让当前线程挂起,使得其他线程可以和当前线程再次的抢占CPU资源。

    3. 由于CPU资源是有限的,所以进程中的多个线程要抢占CPU,这也导致进程中的多个线程交替执行。

            好比说
            人们在排队买东西
            轮到你了,而你可能还没想好买什么或者在考虑什么,总之你不着急买
            那么你可以让位,你可以Thread.Sleep(100)
            让身后排队的100个人买了你再买
            也可以Thread.Sleep(0)
            让出一下
            后边有人顶上了,你就排他后边 
            如果后边没人 那么你自然还可以排在你原来的位置上。

 

 

   二:举例

View Code
 1 delegate void OutPutDelegate();
 2 static void Main(string[] args)
 3 {
 4       Console.WriteLine("Now main thread begin");
 5       OutPutDelegate outPutDelegate = new OutPutDelegate(OutPutData);
 6       Thread thread = new Thread(new ThreadStart(outPutDelegate));
 7        thread.Start();
 8        for (int i = 0; i < 5; i++)
 9        {
10             Console.WriteLine(i);
11             Thread.Sleep(0);
12         }
13         Console.ReadKey();
14 }
15 
16 private static void OutPutData()
17 {
18         Console.WriteLine("Orther Thread");
19          for (int i = 0; i < 10; i++)
20          {
21               Console.WriteLine(i);
22          }
23          Console.ReadKey();
24 }

主线程挂起来了,资源重新分配,主线程和Orther Thread线程再次的抢占CPU资源,Orther Thread没有抢占到CPU资源,最后还是主线程抢到CPU资源了,所以先输出了0-4。

主线程挂起来了,资源重新分配,主线程和Orther Thread线程再次的抢占CPU资源,主线程抢到CPU资源了所以输出了数字1,Orther Thread一开始没抢到CPU资源,后来Orther Thread又抢占到了CPU资源输出了数字0-9,多个线程交替执行。

主线程挂起来了,资源重新分配,主线程和Orther Thread线程再次的抢占CPU资源,主线程没有抢到CPU资源,Orther Thread抢到CPU资源先输出了数字0-9。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值