1、List(ArrayList不安全)
public class TestList {
public static void main(String[] args) {
//List list = new ArrayList<>();
//List list = new Vector<>();
//List list = Collections.synchronizedList(new ArrayList<>());
//CopyOnWrite 写入时复制 cow 计算机程序设计领域 的一种优化策略
//多个线程调用的时候,list,读取的时候,固定写入(覆盖);在写入时覆盖避免造成数据问题
List list = new CopyOnWriteArrayList<>();
for (int i = 0; i < 30; i++) {
new Thread(()->{
list.add(UUID.randomUUID().toString().substring(0,5));
System.out.println(list);
},String.valueOf(i)).start();
}
}
}
CopyOnRight比Vectory厉害在哪
只要有synchronized的方法,效率就比较低
vectory使用synchronized同步方法
copyonwritearraylist使用reentrantlock
2、Set
HashSet底层就是HashMap
public class TestSet {
public static void main(String[] args) {
//Set set = new HashSet<>();
//Set set = Collections.synchronizedSet(new HashSet<>());
Set set = new CopyOnWriteArraySet<>();
for (int i = 0; i < 30; i++) {
new Thread(()->{
set.add(UUID.randomUUID().toString().substring(0,5));
System.out.println(set);
},String.valueOf(i)).start();
}
}
}
3、HashMap
HasnMap底层:加载因子与初始容量
Mapmap = new HashMap<>();
等价于
Mapmap = new HashMap<>(16,0.75);
16:初始容量
0.75:影响因子
public class TestMap {
public static void main(String[] args) {
//new HashMap<>(16,0.75f) 默认容量16,加载因子 0.75f
//Map map = new HashMap<>();
//Map map = new Hashtable<>();
//Map map = Collections.synchronizedMap(new HashMap<>());
Map map = new ConcurrentHashMap<>();
for (int i = 0; i < 30; i++) {
new Thread(()->{
map.put(Thread.currentThread().getName(),UUID.randomUUID().toString().substring(0,5));
System.out.println(map);
},String.valueOf(i)).start();
}
}
}



