多线程随笔一(AutoResetEvent和ManulResetEvent)
AutoResetEvent和ManulResetEvent是.net中用来做线程的同步的两个类。从类名上不难看出,这两个类的区别在于一个是自动的,一个是手动的(这不是废话嘛)。两个类的实现原理大致相同,主要是初始化类对象的时候,设置一个状态位,通过判断这个状态位,决定代码是继续执行还是等待。
常用的方法有以下四个:
构造函数,MSDN的解释为Initializes a new instance of the AutoResetEvent class with a Boolean value indicating whether to set the initial state to signaled.
通过一个Bool值设置初始的信号状态(true为已接收到信号,false为未接收到信号)。
2. Reset()
MSDN的解释为Sets the state of the event to nonsignaled, causing threads to block.
设置状态为未接收到信号,引起线程阻塞。
3. Set()
MSDN的解释为Sets the state of the event to signaled, allowing one or more waiting threads to proceed.
设置状态为已接收到信号,该状态下线程能正常执行。
4. WaitOne():
MSDN的解释为Blocks the current thread until the current WaitHandle receives a signal.
阻塞当前线程,知道接收到信号。
看了这三个方法的解释,就不难理解这几个方法的用途。通过调用WaitOne方法,阻塞当前线程,判断状态位,如果状态为已接收到信号(初始化为true或调用Set方法),继续执行后续代码,否则(初始化为false或调用Reset方法),等待直到信号状态变为已接收到信号。那么AutoResetEvent和ManulResetEvent在使用上有什么区别呢?其实区别很简单,AutoResetEvent在每次调用WaitOne通过之后,都会调用Reset,将状态置为未接收到信号状态,引起其他WaitOne的阻塞,而ManulResetEvent则不会这么做。类似于AutoResetEvent通过一个后就把闸机关上了,ManulResetEvent则一直保持畅通状态。
第一次写博客,关于AutoResetEvent和ManulResetEvent的内容先写到这,之后再补上Thread,Task等内容。
多线程随笔一(AutoResetEvent和ManulResetEvent)的更多相关文章
- JAVA 多线程随笔 (三) 多线程用到的并发容器 (ConcurrentHashMap,CopyOnWriteArrayList, CopyOnWriteArraySet)
1.引言 在多线程的环境中,如果想要使用容器类,就需要注意所使用的容器类是否是线程安全的.在最早开始,人们一般都在使用同步容器(Vector,HashTable),其基本的原理,就是针对容器的每一个操 ...
- JAVA 多线程随笔 (一) 可见性和volatile关键字
// 先上代码 1 public class NoVisibility { private static boolean ready; private static int number; priva ...
- 一个实例明白AutoResetEvent和 ManulResetEvent的用法
先看一段代码: public class WaitHandlerExample { public static AutoResetEvent waitHandler; ...
- 多线程随笔二(Task)
Task类是.net 4.0新加进来的特性,对原有的Thread,ThreadPool做了进一步的封装,使得.net平台上的多线程编程变得更加方便.废话不多说,进入正题. 一. Task启动 Task ...
- c# 多线程编程中AutoResetEvent和ManualResetEvent
作为等同于Java的wait,notify,notifyAll的存在,AutoResetEvent和ManualResetEvent分别实现了notify和notifyAll的功能,下面的代码简单讲解 ...
- JAVA 多线程随笔 (二) sleep, yield, join, wait 和notify
这里先说明一下锁对象,如果一个类比如Person里的方法都有synchronized来修饰,那么每一个方法的锁对象就是Person的一个实例person. 锁对象也可以针对某个特定的实例, 比如syn ...
- 多线程随笔知识点总结-NSThread4.1
线程的状态 状态说明 a.新建 实例化线程对象 b.就绪 向线程对象发送start消息,线程对象被加入可调度线程池等待CPU调度;detach方法和performSelectorInBackGroun ...
- C#多线程之二:ManualResetEvent和AutoResetEvent
初次体验 ManualResetEvent和AutoResetEvent主要负责多线程编程中的线程同步:以下一段是引述网上和MSDN的解析: 在.Net多线程编程中,AutoResetEvent和Ma ...
- C#多线程之 ManualResetEvent和AutoResetEvent
初次体验 ManualResetEvent和AutoResetEvent主要负责多线程编程中的线程同步:以下一段是引述网上和MSDN的解析: 在.Net多线程编程中,AutoResetEvent和Ma ...
随机推荐
- XML中的五个保留字符及实体引用
字符名称 字符 实体引用 和 & & 大于号 > > 小于号 < < 单引号 ‘ ' 双引号 “ " 在XML文档中,构成元素内 ...
- EF如何操作内存中的数据和加载外键数据:延迟加载、贪婪加载、显示加载
EF如何操作内存中的数据和加载外键数据:延迟加载.贪婪加载.显示加载 之前的EF Code First系列讲了那么多如何配置实体和数据库表的关系,显然配置只是辅助,使用EF操作数据库才是每天开发中都需 ...
- UI基础UIButton
UI基础UIButton 前面写了UIWindow.UIViewController,那些都是一些框架,框架需要填充上具体的view才能组成我们的应用,移动应用开发中UI占了很大一部分,最基础的UI实 ...
- 实现了一个简单的key-value存储系统
实现了一个简单的key-value存储系统 源码下载: kvfs.rar 正文: 所谓的Key-Value就是每次存储一个数据时,是根据Key进行索引存储的.为了实现Key的快速查找功能,我使用了B- ...
- C# 编写简易 ASP.NET Web 服务器
C# 编写简易 ASP.NET Web 服务器 你是否有过这样的需求——想运行 ASP.NET 程序,又不想安装 IIS 或者 Visual Studio?我想如果你经常编写 ASP.NET 程序的话 ...
- 对Git的一些理解
使用Git都快2年了,能够说熟练使用git,遇到不会的也可以自己查询git帮助手册.平时可以根据shell的管道命令,组合一些命令比如git show commitID | grep “diff”来看 ...
- 分享一个javascript alert精简框架
如果你不喜欢浏览器自带的alert你可以尝试总共不超过10KB somke js 下载地址:http://smoke-js.com/ 使用方法 somke.alert("hello wor ...
- 横瓜执导众程序员开展大讨论关于C、JAVA及其它主流IT技术使用情况和优点缺点。
横瓜执导众程序员开展大讨论关于C.JAVA及其它主流IT技术使用情况和优点缺点. 遥执乾坤(44758121) 18:21:23 mysql据说只能使用一个索引,我这里几乎所有字段都有索引. 但每个 ...
- Android开发(25)--framebyframe帧动画并实现启动界面到主界面的跳转
Drawable animation可以加载Drawable资源实现帧动画.AnimationDrawable是实现Drawable animations的基本类.推荐用XML文件的方法实现Drawa ...
- 结构-行为-样式-angularJs笔记
0.关于Ng-app 通过ngApp指令来引导Angularjs应用是一种简洁的方式 ,适合大多数情况.在高级开发中,例如使用脚本装载应用,您也可以使用Bootstrap手动引导AngularJs ...