zoukankan      html  css  js  c++  java
  • 【转载】C# sleep 和wait的区别

    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

  • 相关阅读:
    我的JavaScript之旅——this到底是啥?
    关闭或修改 IIS 443 端口
    UTF8 GBK UTF8 GB2312 之间的区别和关系
    正则表达式符号解释1
    用 Gmail 的 SMTP 发送邮件
    ASCII 码表
    DNN建立前,需要对其进行一些配置
    XAMPP安装和使用教程(图文并茂)
    Visual Studio IDE 实用小技巧
    第二讲 硬件I/O操作
  • 原文地址:https://www.cnblogs.com/bad-man/p/7940535.html
Copyright © 2011-2022 走看看