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

时间:2023-03-09 08:27:26
JDK5新特性之线程同步集合(五)

一. 传统集合:

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