Synchronized和SyncRoot与集合类的同步
来源:互联网 发布:网络小本创业 编辑:程序博客网 时间:2024/04/19 14:30
???? 在许多的集合类中,都能看到Syncronized静态方法和SyncRoot实例属性,这两个单词的sync就显而易见的说明了是用来实现同步的,那么,它们内在的机制是什么?
???? Syncronized方法用来创造一个新的对象的线程安全包装,例如:
???????? HashTable ht = HashTable.Syncronized(new HashTable());
???? 使用这个方法创造的ht对象保证了在多线程环境下,进行对象的添加、删除和解析的时候,系统自动为它创建锁定区域,这样,省去了手工进行线程安全的设置。
???? 但是,使用这个方法并不能保证枚举的同步,例如,一个线程正在删除或添加集合项,而另一个线程同时进行枚举,这时枚举将会抛出异常。所以,在枚举的时候,你必须明确锁定这个集合。这是,我们要锁定并不是集合类对象本身,我们要锁定的是它的SyncRoot对象,这是为什么呢?
????? 举例来说,一个集合类将数据存放在某些类型的内部数据结构,如果,这个类给予这个外面对这个数据结构的访问权,那么仅仅锁定集合对象是无用的,当然,大部分情况下,返回的SyncRoot就是它本身,但是,还是有一些例外,所以,我们如果我们并不能确定集合对象和SyncRoot之间的关系,那么我们还是锁定SyncRoot为最佳选择;
???????? lock(ht.SyncRoot)
?????? {
???????????? //你可以安全的对ht进行枚举了
???????? }
- Synchronized和SyncRoot与集合类的同步
- C# Synchronized 和 SyncRoot 实现线程同步的源码分析及泛型集合的线程安全访问
- C# Synchronized 和 SyncRoot 实现线程同步的源码分析及泛型集合的线程安全访问
- Synchronized静态方法和SyncRoot
- Synchronized vs SyncRoot
- lock和synchronized的同步区别与选择
- C# Hashtable Synchronized vs SyncRoot
- C# Hashtable Synchronized vs SyncRoot
- C# Hashtable Synchronized vs SyncRoot
- C# Hashtable Synchronized vs SyncRoot
- 多线程同步 - Array.SyncRoot 属性
- java synchronized同步静态方法和同步非静态方法的区别与举例
- java synchronized同步静态方法和同步非静态方法的区别与举例
- 线程的同步与锁定-synchronized初解
- (转)C# (线程安全的哈希表)Hashtable Synchronized vs SyncRoot
- ReentrantLock和synchronized同步的概述
- synchronized方法和同步块的作用范围;synchronized(this)和synchronized(obj)的区别
- 线程-synchronized方法和同步块的作用范围;synchronized(this)和synchronized(obj)的区别
- Java 开发必去的网站
- RAID磁盘阵列技术
- 磁盘阵列术语汇编
- Oracle10g 企业管理器EM的启动问题
- 磁盘阵列原理祥解
- Synchronized和SyncRoot与集合类的同步
- 一个简单的C#双色球号码随机生成器
- 厚积薄发和薄积厚发
- You can't take the sky from me
- 游戏在各机型的安装,及几个优秀游戏
- 访问IIS元数据库失败
- 获取页面文件名以及URL路径
- 程序情结
- altas(ajax)控件(一):多功能面板控件Accordion