作者H45 (!H45)
站内java
标题Re: [问题] synchronized 动态产生的 object ?
时间Sat Sep 29 00:56:29 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 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)
推荐 Future Pattern
因为你产生物件很花时间
但是又不希望产生物件的时候锁住整个方法,造成效能低落
所以想要让产生物件的时候先释放这个方法。
这个特性非常符合 Future Pattern.
请参考看看。
(抱歉,暂时没有网页可以提供)
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.116.247.13
1F:推 easy1:这..是真的吗 google 上找 不太像有...f@@ 09/29 04:44