【轉載】C# sleep 和wait的區別

來源:互聯網
上載者:User

標籤:使用者   generic   輸入   title   false   stat   space   執行   tab   

eep和wait都是使線程暫時停止執行的方法,但它們有很大的不同。

1. sleep是線程類Thread 的方法,它是使當前線程暫時睡眠,可以放在任何位置。

而wait,它是使當前線程暫時放棄對象的使用權進行等待,必須放在同步方法或同步塊裡。
2.Sleep使用的時候,線程並不會放棄對象的使用權,即不會釋放對象鎖,所以在同步方法或同步塊中使用sleep,一個線程訪問時,其他的線程也是無法訪問的。

而wait是會釋放對象鎖的,就是當前線程放棄對象的使用權,讓其他的線程可以訪問。

3.線程執行wait方法時,需要其他線程調用Monitor.Pulse()或者Monitor.PulseAll()進行喚醒或者說是通知等待的隊列。

而sleep只是暫時休眠一定時間,時間到了之後,自動回復運行,不需另外的線程喚醒.

參考代碼:

using System;using System.Collections.Generic;using System.Text;using System.Threading;namespace ConsoleApplication1{       class Program    {        static readonly object _locker = new object();         static bool _go;        static void Main(string[] args)        {            new Thread(Work).Start(); //新線程會被阻塞,因為_go == false            Console.ReadLine(); //等待使用者輸入            lock (_locker)            {                _go = true; //改變阻塞條件                Monitor.Pulse(_locker); //通知等待的隊列。            }            Thread.Sleep(1000);        }         static void Work()        {            lock (_locker)            {                while (!_go) //只要_go欄位是false,就等待。                    Monitor.Wait(_locker); //在等待的時候,鎖已經被釋放了。            }            Console.WriteLine("被喚醒了");        }            }}

 

【轉自】http://blog.csdn.net/zhuoyue008/article/details/53382194

【轉載】C# sleep 和wait的區別

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.