- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
第
C#中Sleep()和Wait()的区别小结
目录Sleep()方法:Wait()方法:参考代码:区别:Sleep()和Wait()是两个不同的方法,用于控制线程的执行。
Sleep()方法:
是线程类Thread的静态方法,它使当前线程暂停执行一段时间。
Sleep()方法接受一个参数,表示线程暂停的时间长度,单位是毫秒。
在暂停期间,线程不会释放锁资源。当暂停时间结束后,线程会重新进入就绪状态,等待CPU调度执行。
Sleep()方法可以用于模拟一段时间的延迟操作。
Wait()方法:
是Object类的实例方法,它使当前线程进入等待状态,直到其他线程调用相同对象的Notify()或NotifyAll()方法唤醒它。
Wait()方法必须在同步代码块或同步方法中调用,并且会释放锁资源。当线程被唤醒后,它会重新竞争锁资源,并继续执行。
Wait()方法通常与Notify()或NotifyAll()方法配合使用,用于实现线程间的协作。(Notify:通知)
参考代码:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Text;
usingSystem.Threading;
namespaceConsoleApplication1
classProgram
staticreadonlyobject_locker=newobject();
staticbool_go;
staticvoidMain(string[]args)
newThread(Work).Start();//新线程会被阻塞,因为_go==false
Console.ReadLine();//等待用户输入
lock(_locker)
_go=true;//改变阻塞条件
Monitor.Pulse(_locker);//通知等待的队列。
Thread.Sleep(1000);
staticvoidWork()
lock(_locker)
while(!_go)//只要_go字段是false,就等待。
Monitor.Wait(_locker);//在等待的时候,锁已经被释放了。
Console.WriteLine(被唤醒了);
区别:
Sleep()是Thread线程类的方法,而Wait()是Object类的方法。Seep()会暂停当前线程的执行一段时间,而Wait()会使当前线程进入等待状态。Sleep()不会释放锁资源,而Wait()会释放锁资源。Sleep()不需要被其他线程唤醒,而Wait()需要被其他线程调用相同对象的Notify()或NotifyAll()方法唤醒。
需要注意的是,Sleep()和Wait()方法都可能抛出InterruptedException异常,需要进行异常处理。
文档评论(0)