本帖最后由 李罡 于 2013-4-14 11:18 编辑
- import java.util.*;
- class Test2
- {
- public static void main(String[] args)
- {
- List<String> al = new ArrayList<String>();
- al.add("java01");
- al.add("java02");
- al.add("java03");
- al.add("java04");
- al.add("java05");
- al.add("java06");
- List<String> list=al.subList(2,5);
- System.out.println(al);
- for(int i=4;i>=2;i--)
- {
- al.remove(i);
- }
- al.addAll(list);//这个代码会报出同步并发异常
- System.out.println(al);
- }
- }
复制代码 上面这个程序运行的时候怎么会出现同步并发异常呢?不就是先用for循环删除数据再往里面添加一个集合吗?并没有使用迭代器的同时使用集合的方法操作它,查看API文档也没看明白,同步并发异常的机制是什么。。。求解释。
还有下面这个代码也会发生异常:连续用两次addAll(list)怎么就不行呢- import java.util.*;
- class Test2
- {
- public static void main(String[] args)
- {
- List<String> al = new ArrayList<String>();
- al.add("java01");
- al.add("java02");
- al.add("java03");
- al.add("java04");
- al.add("java05");
- al.add("java06");
- List<String> list=al.subList(2,5);
- System.out.println(al);
-
- al.addAll(list);
- List al2=al;
- System.out.println(al.addAll(list));//出现同步并发异常。把al换成al2后,可以正常运行。。。
-
-
- }
- }
复制代码 |