java_集合不安全

1、ArrayList

/**
 * 集合类不安全问题
 * 1、故障现象:
 *      java.util.ConcurrentModificationException(并发修改异常)
 * 2、解决方案
 *      3.1、new Vector<>();
 *      3.2、Collections.synchronizedList(new ArrayList<>());
 *      3.3、new CopyOnWriteArrayList<>();//写时复制
 */
public class ContainerNotSafeDemo {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        for (int i = 1; i <= 10; i++) {
            new Thread(() ->{
                list.add(UUID.randomUUID().toString().substring(0,8));
                System.out.println(list);
            },String.valueOf(i)).start();
        }
    }
}

 

ArrayList之线程不安全解决方式1:使用线程安全的集合,例如Vector、Stack

List<String> list = new Vector<>();

ArrayList之线程不安全解决方式2:

使用Collections类

List<String> list = Collections.synchronizedList(new ArrayList<>());

ArrayList之线程不安全解决方式3:

写时拷贝技术

List<String> list = new CopyOnWriteArrayList<>();

 

2、HashSet

    public static void main(String[] args) {
        Set<String> set = new HashSet<>();
        for (int i = 1; i <= 30; i++) {
            new Thread(() ->{
                set.add(UUID.randomUUID().toString().substring(0,8));
                System.out.println(set);
            },String.valueOf(i)).start();
        }
    }

HashSet之线程不安全解决方式1:

Set<String> set = Collections.synchronizedSet(new HashSet<>());

HashSet之线程不安全解决方式2:

Set<String> set = new CopyOnWriteArraySet<>();

 

3、HashMap

    public static void main(String[] args) {
        Map<String,String> map = new HashMap<>();
        for (int i = 1; i <= 30; i++) {
            new Thread(() ->{
                map.put(Thread.currentThread().getName(),UUID.randomUUID().toString().substring(0,8));
                System.out.println(map);
            },String.valueOf(i)).start();
        }
    }

HashMap之线程不安全解决方式1:使用线程安全的集合,例如Hashtable

HashMap之线程不安全解决方式2:

Map<String,String> map = Collections.synchronizedMap(new HashMap<>());

HashMap之线程不安全解决方式3:

Map<String,String> map = new ConcurrentHashMap<>();

 

posted @ 2021-02-26 16:27  DHaiLin  阅读(82)  评论(0编辑  收藏  举报