[問題] synchronized 動態產生的 object ?
http://java.sun.com/docs/books/tutorial/essential/concurrency/locksync.html
中間有一個範例
public class MsLunch {
private long c1 = 0;
private long c2 = 0;
private Object lock1 = new Object();
private Object lock2 = new Object();
public void inc1() {
synchronized(lock1) { c1++; }
}
public void inc2() {
synchronized(lock2) { c2++; }
}
}
如果我的class是
public class MyClass {
private HashMap <Key,Obj> map = new HashMap<Key, Obj>();
public Obj getObj(Key key) { // 絕對不會return null
synchronized(?) { // 想只對相同 key 作sync
if (!this.map.containsKey(key)) {
Obj obj = generateObj(); // generateObj 會很花時間, 只想作一次
this.map.set(key, obj);
}
}
return this.map.get(key);
}
}
我該怎樣 synchroized (?), 除了使用 synchronized(this).
以上的技巧有幫助嗎, 或是有更聰明的方法?
感謝!
※ 編輯: easy1 來自: 79.210.98.27 (09/28 20:46)
討論串 (同標題文章)
以下文章回應了本文 (最舊先):
完整討論串 (本文為第 1 之 6 篇):