public static void main(String[] args) {
final List<Integer> ages=new ArrayList<Integer>();
for (int i = 0; i < 100; i++) {
ages.add(i);
}
Thread t=new Thread(){
public void run() {
for (int i = 100; i < 200; i++) {
ages.add(i);
Thread.yield();
}
}
};
Thread t2=new Thread(){
public void run() {
Iterator<Integer> it=ages.iterator();
while(it.hasNext()){
System.out.println(it.next());
Thread.yield();
}
}
};
t2.start();
t.start();
}
以上这段代码会报java.util.ConcurrentModificationException异常。我知道为什么会发生该异常,就是因为集合被其它线程修改了。
知道原因但是却不知道解决方法。我不知道怎么做到我在用迭代器进行遍历的时候,让其它线程修改不了我这个集合。
请高手不吝赐教。
解决方案 »
- 有没有可能提高apache-commons ftp 上传速度
- 加密问题求解~~如何把分解成字符的String 在重新转成字符串~~~
- SQL问题
- JTable中加入JCheckBox需要重写AbstractTableModel中的getColumnClass()
- 帮忙写个正则表达式,很简单
- 创建JDialog窗口如何加上右上方最大化最小化按钮
- 利用hibernate怎么运行sp?
- 郁闷J2SE
- 还是关于JFrame中的结构
- 那位大虾用过JNDI编写Windows的DNS(活动目录)!!!
- 用httpclient和httprequest模拟请求出现邪门的乱码,求助
- java中的byte为什么会出错 byte b =0xff???
我觉得可以对读、写方法进行同步,这样的话就退化到Vector了,,,因为每个方法都是同步的,也就没有了ArrayList的性能优势。具体CopyOnWriteArrayList的性能损失要看具体情况,如果是在大量读而少量写的情况下,性能损失还是很小的;反之,很大所以说还要看使用ArrayList的环境,然后选择