如果要进行多个数据对象保存,一定首选类集(List、Set、Queue、Map),许多的集合的子类都具有同步与异步的差别,但是如果真的要在多线程之中去使用这些类,是否真的可以用呢?
范例:观察一下类集的问题
import java.util.ArrayList; import java.util.List;
public class MLDNTestDemo {
public static void main(String[] args) throws Exception {
// 异步处理
List<String> all = new ArrayList<String>() ;
for (int x = 0; x < 20; x++) {
int temp = x ;
new Thread(()->{
for (int y = 0; y < 30; y++) {
all.add(Thread.currentThread().getName()
+ " - " + temp + " - " + y) ;
System.out.println(all);
}
}).start(); ;
} } }
该异常主要指的是当你保存的容量个数和你的实际操作数可能不匹配的时候就会出现此异常。
【 并发集合工具类 】
➣ 为了更好的实现集合的高兵法访问处理,创建了一组心的集合工具类。
➣ List和Set集合:
➣ CopyOnWriteArrayList相当于线程安全的ArrayList,实现了List接口。
CopyOnWriteArrayList是支持高并发的;
➣ CopyOnWriteArraySet相当于线程安全的HashSet,它继承了AbstractSet类,
CopyOnWriteArraySet内部包含一个CopyOnWriteArrayList对象,
它是通过CopyOnWriteArrayList实现的。
➣ Map集合:
➣ ConcurrentHashMap是线程安全的哈希表(相当于线程安全的HashMap);
它继承于AbstractMap类,并且实现ConcurrentMap接口。
ConcurrentHashM