土味情话:前半生到处浪荡,后半生为你煲汤。
前言
面试官:小伙子,你知道集合吗?
我:知道啊,集合的顶层接口为Collection,下面分为List、Set…(说的口水喷2m远)
面试官:好,你刚才说线程安全的集合,那线程安全的集合就一定线程安全吗?
我:线程安全的集合肯定线程安全啊(内心:???)
面试官:嗯,回去等通知吧
我:…
So,线程安全的集合就一定线程安全吗?
集合简介
众所周知,集合分为线程安全和非线程安全,安全的集合有:List接口下的:Vector
、CopyOnWriteArrayList
、Collections.synchronizedList()
,Set接口下的:CopyOnWriteArraySet
、synchronizedSet
,Map接口下的:HashTable
、ConcurrentHashMap
等。
其中比较常见的集合:Vector
、HashTable
等实现线程安全的方式是通过synchronized
关键字加锁来保证线程安全。
但是线程安全的集合真的是线程安全的吗?
回答:是线程安全,不过却是相对线程安全
相对线程安全:可能由于线程顺序的不一致导致线程不安全
源码查看
- Vector的源码查看
基本上所有操作数据的方法都使用了 synchronized关键字来保证线程安全
public synchronized boolean add(E e) {
modCount++;
ensureCapacityHelper(elementCount + 1);
elementData[elementCount++] = e;
return true;