`
lliang54
  • 浏览: 4056 次
  • 性别: Icon_minigender_1
  • 来自: 南京
文章分类
社区版块
存档分类
最新评论

《java 并发编程实战》基础构建笔记

 
阅读更多
5.1.1 同步容器类的问题,在多线程的情况下,如,a 线程 对vector  执行 get 操作, 另外一个线程对vector 进行delete 操作,由于线程交替执行,可能有一个线程获取下标 为9 但是另外一个线程已经删除了下标为9的数据,导致数组下标越界,所以对同步容器进行复合操作,在高并发的情况下,就需要客户端加锁
5.1.2 迭代器与并发修改错误,在使用迭代器的过程中,可能会出现并发修改错误问题,例如 A线程删除了一个元素,当B线程发现计数器发生改变时,会抛出并发修改错误溢出,这个是一个jdk 的 设计,使用fail-fast ,使用快速失败模式,通知使用者已经发生异常了,在单线程的情况下也会出现,当使用迭代器模式删除数据的时候,会产生错误
public class AddRemoveListElement {

    public static void main(String args[]) {
        List<String> list = new ArrayList<String>();
        list.add("A");
        list.add("B");

        for (String s : list) {
            if (s.equals("B")) {
                list.remove(s);
            }
        }

        //foreach循环等效于迭代器
        /*Iterator<String> iterator=list.iterator();
        while(iterator.hasNext()){
            String s=iterator.next();
            if (s.equals("B")) {
                list.remove(s);
            }
        }*/    
    }
}
 
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics