Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1503070
  • 博文数量: 286
  • 博客积分: 3713
  • 博客等级: 少校
  • 技术积分: 2275
  • 用 户 组: 普通用户
  • 注册时间: 2012-01-11 09:47
个人简介

http://blog.chinaunix.net/uid/16979052.html

文章分类

全部博文(286)

文章存档

2018年(1)

2017年(16)

2016年(9)

2015年(17)

2014年(15)

2013年(112)

2012年(116)

分类:

2012-09-28 09:11:24

原文地址:Java容器类的线程安全 作者:阿4is痞男

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(); 
              }  

        }
    }
阅读(971) | 评论(0) | 转发(0) |
0

上一篇:linux 串口引导

下一篇:crontab格式

给主人留下些什么吧!~~