Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1275846
  • 博文数量: 247
  • 博客积分: 5587
  • 博客等级: 大校
  • 技术积分: 2060
  • 用 户 组: 普通用户
  • 注册时间: 2010-02-24 13:27
文章分类
文章存档

2012年(101)

2011年(44)

2010年(102)

分类: Java

2012-09-25 09:59:18

1、Java容器类的关系图

Collection
├List      接口
│├LinkedList      链表
│├ArrayList        顺序结构动态数组类
│└Vector        向量
│ └Stack      栈
└Set
Map
├HashTable
├HashMap
└WeakHashMap List接口
2、线程安全的和线程不安全的

Vector和HashMap是线程安全的

LinkedList、ArrayList和HashMap是线程不安全的

由于同步需要花费时间,因此线程安全的执行效率要低于线程不安全的

3、在多线程操作

案例:多线程操作导致List报NoSuchElementException

java.util.NoSuchElementException
    at java.util.LinkedList.remove(LinkedList.java:788)
    at java.util.LinkedList.removeFirst(LinkedList.java:134)
    at freemarker.core.RegexBuiltins.getPattern(RegexBuiltins.java:138)

解决方法:

  • 调用Collections的同步List

    List items = Collections.synchronizedList(new LinkedList()); 

    public void remove() {  
            if (!items.isEmpty()) {  
                return items.remove(0); 
              }  

    }

  • 设置标志,同步

    LinkedList items = new LinkedList(); 
    String flag="abcdef"; 
    public void remove() { 
        synchronized(flag){ 
            if (!items.isEmpty()) {  
                return items.removeFirst(); 
              }  

        }
    }
阅读(5711) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~