JAVA 8 併發增強 (5) 執行緒安全的Set
阿新 • • 發佈:2018-12-12
Q:如何得到一個執行緒安全的Set?
/* * 如何得到一個大的,執行緒安全的Set * 它其實是對ConcurrentHashMap<K,Boolean>物件的封裝,所有的對映的值都是Boolean.TRUE */ Set<String> words = ConcurrentHashMap.<String> newKeySet(); words.add("a"); words.add("a"); words.add("b"); System.out.println(words); /* * 如果你已經有了一個對映,那麼keySet會返回所有鍵的Set。該Set是可變的。如果你刪除該Set中的元素,那麼相應的鍵和值也會從對映中刪除 * 但是無法向這個Set中新增元素 * ,因為無法新增相應的值。因此Java8給ConcurrentHashMap添加了一個keySet方法,它可以接受一個預設值 * ,以便向Set中新增元素。 */ ConcurrentHashMap<String, Long> map = new ConcurrentHashMap<String, Long>(); map.put("a", 1L); map.put("b", 2L); map.put("c", 3L); Set<String> set2 = map.keySet(1L);//預設值是1 System.err.println(map); set2.remove("c"); set2.add("d");// 如果改為map.keySet();set新增元素會丟擲java.lang.UnsupportedOperationException System.err.println(set2); System.err.println(map);