Re: [問題] synchronized 動態產生的 object ?
※ 引述《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
09/29 04:44, 1F
推
09/29 08:09, , 2F
09/29 08:09, 2F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 4 之 6 篇):