首页 > 其他 > 详细

Java集合和Apache-Commons-Collections的线程安全性机制

时间:2014-01-23 01:23:51      阅读:356      评论:0      收藏:0      [点我收藏+]

JDK中线程安全的类包括:

  • Vector:与ArrayList最大的差别就是线程安全
  • Stack:线程安全,不常使用;推荐使用Deque接口的ArrayDeque实现类
  • Hashtable:相对HashMap而言,线程安全

      我所知道的上面三个类线程安全,其它的大部分都是线程不安全的。比较意外的是,常用的List、Map、Set等都是线程不安全的,不常用的反而线程安全。

PS: enum 类实现了 Enumeration接口,有人说它是线程安全的,其实不是。

 

 

如何保证线程安全?

Apache Commons-Collections中大部分集合类的实现都是线程不安全的,我们在使用这些集合的时候,为需要同步的方法体加上synchronized关键字,可以保证线程安全。

Commons-Collections使用了Java的集合synchronization机制,我们可以使用jdk中Collections工具类将线程不安全的集合包装成线程安全的集合。Collections中的synchronizedXXX(Collection<T> c)方法,返回一个以原集合为基础的线程安全的集合。

      当对返回的集合进行遍历时,需要手动加上synchronized,否则将会线程不安全。

示例代码:

 

   1: Set<String> set = Collections.synchronizedSet(new HashSet<String>());
   2: synchronized(set) {
   3:     Iterator<String> i = set.iterator(); //一定要放在synchronized代码块中
   4:      while(i.hasNext()) {
   5:         i.next();
   6:     }
   7: }

Java集合和Apache-Commons-Collections的线程安全性机制

原文:http://www.cnblogs.com/tadckle/p/3530075.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!