5. 集合不安全
阿新 • • 發佈:2020-08-07
List 不安全
List<String> list = new ArrayList<>(); List<String> list2 = Collections.synchronizedList(new ArrayList<>()); // CopyOnWrite 寫入時複製; /** * CopyOnWriteArrayList 比 Vetor 厲害在: * CopyOnWriteArrayList 用的 Lock 鎖, Vetor 使用的是 synchronized 鎖,synchronized 鎖效能沒有Lock好 * * * 多個執行緒呼叫的時候,list ,讀取的時候,固定的,寫入 * 在寫入的時候避免覆蓋,造成資料問題。 * 讀寫分離 */ List<String> list3 = new CopyOnWriteArrayList<>(); for (int i = 1; i <=100 ; i++) { new Thread(()->{ list3.add("1"); System.out.println(list3); }, String.valueOf(i)).start(); }
Set
Set<String> set = new HashSet<>();
Set<String> set2 = Collections.synchronizedSet(new HashSet<>());
Set<String> set3 = new CopyOnWriteArraySet<>();
HashSet 的底層
public HashSet() { map = new HashMap<>(); } // set 的本質就是 map 的key,因為key是無法重複的 public boolean add(E e) { return map.put(e, PRESENT)==null; }
Map 不安全
Map<String, Object> map = new HashMap<>(); // 1.map 是這樣用的嗎 /** * 工作中不用 HashMap */ // 2.預設等價於什麼? /** * Map<String, Object> map = new HashMap<>(); * === Map<String, Object> map = new HashMap<>(16, 0.75); */ /** * 載入因子和初始化容量 */ Map<String, Object> map1 = new ConcurrentHashMap<>();