請參見下面的代碼:如何鎖定可以在迭代SynchronizedList時列出自己?
List list = Collections.synchronizedList(new ArrayList());
// ...
synchronized (list) {
Iterator i = list.iterator(); // Must be in synchronized block
while (i.hasNext())
foo(i.next());
}
我知道迭代一個synchronied列表時,主叫方應該同步,但爲什麼用「清單」的鎖我無法理解。 Inner SynchronizedList類,私有成員互斥鎖是鎖。所以如果調用者使用「list」作爲鎖,調用者和內部之間的鎖是不同的。我認爲這個事實讓同步毫無意義。
我看到Collections.synchronizedList的代碼,並發現鎖是「互斥體」而不是「this」。所以我很困惑...... – 2012-03-28 07:09:39
你可以在這裏看到代碼,「mutex = this」(SynchronizedList是SynchronizedCollection的一個子類,在SynchronizedCollection的構造方法中):http://www.grepcode.com/file/repository .grepcode.com/java/root/jdk/openjdk/7-b147/java/util/Collections.java#1602 – zsxwing 2012-03-28 07:13:32
哦,我現在明白了。我很粗心。謝謝您的回答。 – 2012-03-28 07:16:53