国内最全IT社区平台 联系我们 | 收藏本站
华晨云阿里云优惠2
您当前位置:首页 > 互联网 > JDK5新特性之线程同步集合(五)

JDK5新特性之线程同步集合(五)

来源:程序员人生   发布时间:2014-11-17 09:06:34 阅读次数:3235次

1. 传统集合:

传统方式下的Collection在迭代集合时, 不允许对集合进行修改:

public class CollectionModifyExceptionTest { public static void main(String[] args) { Collection<String> list = new ArrayList<String>(); list.add("aaa"); list.add("bbb"); list.add("ccc"); Iterator<String> iter = list.iterator(); while (iter.hasNext()) { String str = (String) iter.next(); if ("aaa".equals(str)) { list.remove(str); } else { System.out.println(str); } } } }

产生以下异常:

Exception in thread "main" java.util.ConcurrentModificationException at java.util.AbstractList$Itr.checkForComodification(AbstractList.java:372) at java.util.AbstractList$Itr.next(AbstractList.java:343) at com.zdp.thread.CollectionModifyExceptionTest.main(CollectionModifyExceptionTest.java:17)

2. 同步集合:

JDK5提供了以下1些同步集合类:

ConcurrentHashMap  --> 并发条件下使用,和HashMap继承同1个类,在每一个方法上都加了“锁”

CopyOnWriteArrayList  --> 可以在循环的时候进行增删操作

CopyOnWriteArraySet

public class CollectionModifyExceptionTest { public static void main(String[] args) { Collection<String> list = new CopyOnWriteArrayList<String>(); list.add("aaa"); list.add("bbb"); list.add("ccc"); Iterator<String> iter = list.iterator(); while (iter.hasNext()) { String str = (String) iter.next(); if ("aaa".equals(str)) { list.remove(str); } else { System.out.println(str); } } } }



生活不易,码农辛苦
如果您觉得本网站对您的学习有所帮助,可以手机扫描二维码进行捐赠
程序员人生
------分隔线----------------------------
分享到:
------分隔线----------------------------
关闭
程序员人生