1. Traditional collection:
In the traditional method, collection objects cannot be modified when the set is iterated:
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);}}}}
The following exception occurs:
Exception in thread "main" java.util.ConcurrentModificationExceptionat 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. Synchronization set:
JDK 5 provides the following synchronization collection classes:
Concurrenthashmap --> used under concurrent conditions. It inherits the same class as hashmap and adds a "Lock" to each method"
Copyonwritearraylist --> you can add or delete objects in a loop.
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);}}}}
Synchronization set of new features in jdk5 (5)