0
1.6 Javadoc並不清楚這一點。是什麼使用synchronizedCollection和剛剛同步(集合)有什麼區別?
List l = LinkedList();
synchronized (l) {
l.add... // do some work
l.set...
l.remove...
}
與
List l = LinkedList();
Collection c = Collections.synchronizedCollection (l);
synchronized (c) {
c.add...; c.set....; c.remove...
}
的區別??? 爲什麼需要一個synchronizedCollection類?第一種方法有什麼問題?
但是根據javadoc:如果多個線程同時訪問鏈接列表,並且至少有一個線程在結構上修改了列表,則它必須在外部進行同步。 ....這通常是通過同步某些自然地將列表清除的對象來實現的。如果不存在這樣的對象,則應使用Collections.synchronizedList方法「列出」列表。所以這裏是我不明白,爲什麼javadoc說同步通常是在封裝對象上完成的,而不是鏈表對象本身? –
@FaiLau'synchronizedCollection'返回的對象是* not *鏈接列表。它已經鏈接了它內部的列表,但它是一個特殊的類,它在調用實際列表之前添加了自己的同步。 – dasblinkenlight
好的,我現在明白了。 SyncrhonizedCollection返回一個線程安全的façade到包含類。但是返回的對象是線程安全的,不是併發的。所以當使用迭代器時,對象仍然需要同步。 –