作者easy1 (e :) y)
站内java
标题[问题] synchronized 动态产生的 object ?
时间Fri Sep 28 20:07:49 2007
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)