Re: [問題] synchronized 動態產生的 object ?

看板java作者 (!H45)時間18年前 (2007/09/29 00:56), 編輯推噓2(200)
留言2則, 2人參與, 最新討論串4/6 (看更多)
※ 引述《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

09/29 04:44, , 1F
這..是真的嗎 google 上找 不太像有...f@@
09/29 04:44, 1F

09/29 08:09, , 2F
文章代碼(AID): #16_J8-ZL (java)
討論串 (同標題文章)
文章代碼(AID): #16_J8-ZL (java)