希望實作的功能是為List
提供一個原子運算:若沒有則加入。因為ArrayList
本身不是線程安全的,所以透過集合Collections.synchronizedList
將其轉換為線程安全的類,然後透過一個輔助的方法來為List
實作這麼個功能。
class BadListHelper { public List list = Collections.synchronizedList(new ArrayList()); public synchronized boolean putIfAbsent(E x) { boolean absent = !list.contains(x); if (absent) list.add(x); return absent; } }
這個程式碼是線程不安全的嗎?如果是,可以證明一下嗎?謝謝
用
ConcurrentSkipListSet
不就行了不重複的List,不就是個Set? ,需要原子,不就是執行緒安全的Set?