Class A {
private Map<Oject,Object> map;
public void clear() {
map.clear();
}
public void work() {
synchronized (map) {
map.put(new Object, new Object();
}
}
}
如果線程A位於work()
方法的中間,這是否意味着如果執行clear()
方法,線程B不會阻塞?當在一個地方只有一個對象使用同步塊時會發生什麼?
上面的代碼和這個有什麼區別?
public void clear() {
synchronized (map) {
map.clear();
}
}
+1爲ConcurrentHashMap。 – digitaljoel
或Collections.synchronizedMap) – Leonidos
@SLaks我覺得他在找什麼是Collections.synchronizedMap。因爲如果一個線程正在放置(..),他希望s鎖定地圖。使用Concur..Map,來自不同線程的clear()和put()可以同時進行。如果我的理解錯誤,請糾正我。 – Kent