讀<設計模式之Proxy(代理)>後有兩個疑問。

skillz發表於2007-12-03
1、原文中有一段對copy-on-write操作的context的描述如下:


比如:我們有一個很大的Collection,具體如hashtable,有很多客戶端會併發同時訪問它.其中一個特別的客戶端要進行連續的資料獲取,此時要求其他客戶端不能再向hashtable中增加或刪除 東東.

最直接的解決方案是:使用collection的lock,讓這特別的客戶端獲得這個lock,進行連續的資料獲取,然後再釋放lock.
public void foFetches(Hashtable ht){
  synchronized(ht){
    //具體的連續資料獲取動作..
  }

}


但是這一辦法可能鎖住Collection會很長時間,這段時間,其他客戶端就不能訪問該Collection了.



HashTable本身不就是同步保證了嗎?應該不存在還需要進行lock操作吧

2、最後解決辦法中說:

這個特別的客戶端先透過呼叫一個叫clone的方法來進行一系列資料獲取操作.但實際上沒有真正的進行物件複製,直至有其他客戶端修改了這個物件Collection

如何實現直到別的客戶更改了這個物件時才進行clone呢? 能給個例子嗎?

Thanks!

相關文章