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

  • 相关阅读:
    一个先进的App框架:使用Ionic创建一个简单的APP
    Hexo NexT 博客本地搭建指南
    Spring Boot 2.0 入门指南
    1. 初识 Lucene
    Spring Framework 简介
    电脑软件推荐安装列表
    PHP 环境搭建篇
    C++ STL 容器之栈的使用
    0x02 译文:Windows桌面应用Win32第一个程序
    反射?切面?怎样对公共参数及行为进行封装
  • 原文地址:https://www.cnblogs.com/bad-man/p/7940535.html
Copyright © 2011-2022 走看看