1. 程式人生 > >JAVA 8 併發增強 (5) 執行緒安全的Set

JAVA 8 併發增強 (5) 執行緒安全的Set

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);