希望實(shí)現(xiàn)的功能是為List
提供一個(gè)原子操作:若沒(méi)有則添加。因?yàn)?code>ArrayList本身不是線程安全的,所以通過(guò)集合Collections.synchronizedList
將其轉(zhuǎn)換為一個(gè)線程安全的類,然后通過(guò)一個(gè)輔助的方法來(lái)為List
實(shí)現(xiàn)這么個(gè)功能。
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;
}
}
這個(gè)代碼是線程不安全的嗎?如果是,可以證明一下嗎?謝謝
擁有18年軟件開(kāi)發(fā)和IT教學(xué)經(jīng)驗(yàn)。曾任多家上市公司技術(shù)總監(jiān)、架構(gòu)師、項(xiàng)目經(jīng)理、高級(jí)軟件工程師等職務(wù)。 網(wǎng)絡(luò)人氣名人講師,...