博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【转载】C# sleep 和wait的区别
阅读量:7060 次
发布时间:2019-06-28

本文共 1226 字,大约阅读时间需要 4 分钟。

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("被唤醒了");        }            }}

 

【转自】

转载于:https://www.cnblogs.com/bad-man/p/7940535.html

你可能感兴趣的文章
jdbc的使用
查看>>
云计算概念--公有云和私有云介绍
查看>>
托管代码
查看>>
Glusterfs hacker guide(三)
查看>>
谈epoll与高性能
查看>>
验证下载文件
查看>>
python输出%
查看>>
Json字符串转换为java对象的各种实现方法【json_lib框架、Gson、org.json】
查看>>
Cesium官方教程8-- 几何体和外观效果
查看>>
《×××颂》突破了千年国画技艺的难点
查看>>
Oracle 等待事件之 db file sequential read
查看>>
LoadRunner启动自带例子Web Tours报错
查看>>
致血气方刚的产品经理:如何不被程序员嫌弃
查看>>
导出文件名带时间信息的dmp文件
查看>>
zencart简单设置分类链接不同css样式
查看>>
4、移植三星官方内核
查看>>
jsp页面中jstl标签详解[转]
查看>>
linux下配置jdk+tomcat
查看>>
codeforce div 377
查看>>
使用 RGraph(HTML5) 绘制折线图(一)
查看>>