线程安全的同步容器
创建和jdk自带的同步容器 #### ArrayList -> Vector,Stack Vector 一般情况下是线程安全的,但是在某些情况下是线程不安全的,如下代码会抛出异常,因为顺序问题 会导致get方法抛出异常 ```java
Vector<Integer> vector = new Vector<>();
for(int i =0;i<10;i++){
vector.add(i);
}
Thread thread1 = new Thread(()->{
for (int i = 0; i < vector.size(); i++) {
vector.remove(i);
}
});
Thread thread2 = new Thread(()->{
for(int i =0;i<vector.size();i++){
vector.get(i);
}
});
thread1.start();
thread2.start(); ```
HashMap -> HashTable(key、value不能位null)
HashTable 是线程安全的 方法中都加了synchronized修饰符
Collections.synchronizedXXX(List、Set、Map)
该方法是把一个普通的List Set Map 生成一个线程安全的相应对象 SynchronizedXXX 一些常用操作如put会被添加 synchronized 修饰
public V put(K key, V value) {
synchronized (mutex) {return m.put(key, value);}
}
### 并发容器