作者adrianshum (Alien)
看板java
标题Re: [问题] synchronized 动态产生的 object ?
时间Fri Sep 28 20:20:13 2007
※ 引述《easy1 (e :) y)》之铭言:
: 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 void doObj(Key key) {
: synchronized(?) { // 想只对相同 key 作sync
: if (!this.map.containsKey(key)) {
: Obj obj = generateObj(); // generateObj 会很花时间
: this.map.set(key, obj);
: }
: }
: }
: }
: 我该怎样 synchroized (?), 除了使用 synchronized(this).
: 以上的技巧有帮助吗, 或是有更聪明的方法?
: 感谢!
我会建议:
public void doObj(Key key) {
synchronized {
if (this.map.containsKey(key)) {
return;
}
this.map.put(key, null);
}
// 慢慢 generate 你的 obj
Obj obj = genObject();
this.map.put(key, obj);
}
Alien
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 202.22.246.26
1F:推 easy1:sorry: :-p 刚刚改了原文章 问题不太一样了 09/28 20:36