zoukankan      html  css  js  c++  java
  • JUC之List集合

    /**
     * @desc 非线程安全容器
     *  1.异常
     *      java.util.ConcurrentModificationException
     *  2.解决方案
     *      2.1 new Vector<>();
     *      2.2 Collections.synchronizedList(new ArrayList<>());
     *      2.3 new CopyOnWriteArrayList<>();
     * @Author xw
     * @Date 2019/8/20
     */
    public class ContainerNotSafeDemo {
        public static void main(String[] args) {
            //listNotSafe();
            //setNotSafe();
            mapNotSafe();
        }
    
        private static void mapNotSafe() {
            // Map<String, String> map = new HashMap<>();
            // Map<String, String> map = Collections.synchronizedMap(new HashMap<>());
            Map<String, String> map = new ConcurrentHashMap<>();
            for (int i = 1; i <= 30; i++) {
                new Thread(() -> {
                    map.put(Thread.currentThread().getName(), Thread.currentThread().getName());
                    System.out.println(map);
                }, String.valueOf(i)).start();
            }
        }
    
        private static void setNotSafe() {
            //Set<String> list = new HashSet<>();
            //Set<String> list = Collections.synchronizedSet(new HashSet<>());
            Set<String> list = new CopyOnWriteArraySet<>();
            for (int i = 1; i <= 30; i++) {
                new Thread(() -> {
                    list.add(UUID.randomUUID().toString().substring(0, 8));
                    System.out.println(list);
                }, String.valueOf(i)).start();
            }
        }
    
        private static void listNotSafe() {
            // List<String> list = new ArrayList<>();
            // List<String> list = new Vector<>();
            // List<String> list = Collections.synchronizedList(new ArrayList<>());
            List<String> list = new CopyOnWriteArrayList<>();
            for (int i = 1; i <= 30; i++) {
                new Thread(() -> {
                    list.add(UUID.randomUUID().toString().substring(0, 8));
                    System.out.println(list);
                }, String.valueOf(i)).start();
            }
        }
    }
  • 相关阅读:
    Spring Aop表达式以及EL表达式处理
    Java 设计模式-观察者(Observer )
    Java 设计模式-命令模式(Command Pattern)
    Java 设计模式-策略模式(Strategy Pattern)
    隐式使用This 引用逸出
    Java 设计模式-代理模式(Proxy Pattern)
    Java 设计模式-装饰器模式(Decorator)
    单例设计模式
    抽象工厂
    XML
  • 原文地址:https://www.cnblogs.com/ice-line/p/11385492.html
Copyright © 2011-2022 走看看