码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2014-10-31 12:00:46      阅读:243      评论:0      收藏:0      [点我收藏+]

标签:style   blog   io   ar   使用   java   for   sp   strong   

一. 传统集合:

传统方式下的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)

二. 同步集合:

JDK5提供了如下一些同步集合类:

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

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);
			}
		}
	}
}



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

标签:style   blog   io   ar   使用   java   for   sp   strong   

原文地址:http://blog.csdn.net/zdp072/article/details/40650861

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!