多线程使用的集合类
List
传统的ArrayList在多线程环境是不安全的 有下面这几种解决方案
使用vector(不推荐)
vector你可以认为就是ArrayList所有方法加了synchronized关键词 十分影响性能
Collections.synchronizedList
使用Collections中提供的syn工具方法
public class ListTest {
public static void main(String[] args) {
List<String>list= Collections.synchronizedList(new ArrayList<>());
for(int i=1;i<=10;i++){
new Thread(()->{
list.add(UUID.randomUUID().toString().substring(0,5));
System.out.println(list);
},String.valueOf(i)).start();
}
}
}
CopyOnWriteArrayList 写入时复制

底层实现锁是通过lock锁实现 性能更好
public class ListTest {
public static void main(String[] args) {
List<String>list= new CopyOnWriteArrayList();
for(int i=1;i<=10;i++){
new Thread(()->{
list.add(UUID.randomUUID().toString().substring(0,5));
System.out.println(list);
},String.valueOf(i)).start();
}
}
}
set
由于基本上和List一样 直接给出对应的数据类型 CopyOnWriteArraySet
ConcurrentHashMap
hashmap对应的数据类型为ConcurrentHashMap
原理部分后续更新...

浙公网安备 33010602011771号