harap dapat dilaksanakan adalah untuk mencapai fungsi sebegitu untuk 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;
}
}
Adakah urutan kod ini tidak selamat? Jika ya, bolehkah anda membuktikannya? Terima kasih
Gunakan sahaja
ConcurrentSkipListSet
dan tidak mengapaSenarai yang tidak berulang hanyalah Set, bukan? , memerlukan atom, bukankah Set yang selamat untuk benang?