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

看板java作者 (e :) y)時間18年前 (2007/09/28 20:07), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/6 (看更多)
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)
文章代碼(AID): #16_EwP2x (java)
討論串 (同標題文章)
文章代碼(AID): #16_EwP2x (java)