java线程安全容器_Java容器类的线程安全

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

Listitems = Collections.synchronizedList(new LinkedList());

public void remove() {

if (!items.isEmpty()) {

return items.remove(0);

}

}

设置标志,同步

LinkedListitems = new LinkedList();

String flag="abcdef";

public void remove() {

synchronized(flag){

if (!items.isEmpty()) {

return items.removeFirst();

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值