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