JDK5新特性之線程同步集合(五)
來源:程序員人生 發布時間:2014-11-17 09:06:34 閱讀次數:3370次
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);
}
}
}
}
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈