【转载】C# sleep 和wait的区别
2021-04-25 00:26
标签:用户 generic 输入 title false stat space 执行 tab eep和wait都是使线程暂时停止执行的方法,但它们有很大的不同。 1. sleep是线程类Thread 的方法,它是使当前线程暂时睡眠,可以放在任何位置。 而wait,它是使当前线程暂时放弃对象的使用权进行等待,必须放在同步方法或同步块里。 而wait是会释放对象锁的,就是当前线程放弃对象的使用权,让其他的线程可以访问。 3.线程执行wait方法时,需要其他线程调用Monitor.Pulse()或者Monitor.PulseAll()进行唤醒或者说是通知等待的队列。 而sleep只是暂时休眠一定时间,时间到了之后,自动恢复运行,不需另外的线程唤醒. 参考代码: 【转自】http://blog.csdn.net/zhuoyue008/article/details/53382194 【转载】C# sleep 和wait的区别 标签:用户 generic 输入 title false stat space 执行 tab 原文地址:http://www.cnblogs.com/bad-man/p/7940535.html
2.Sleep使用的时候,线程并不会放弃对象的使用权,即不会释放对象锁,所以在同步方法或同步块中使用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("被唤醒了");
}
}
}
文章标题:【转载】C# sleep 和wait的区别
文章链接:http://soscw.com/index.php/essay/79166.html