|
这个主题共有 1 回复 / 1 页 [
]
|
|
|
|
|
|
读<设计模式之Proxy(代理)>后有两个疑问。
|
发表: 2007年12月03日 15:24
|
回复
|
|
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!
|
|
|
|
|
|
回复:读<设计模式之Proxy(代理)>后有两个疑问。
|
发表: 2007年12月10日 10:12
|
回复
|
|
首先,你要问自己,你是在讨论J2SE语言语法 还是在学习一个无关乎语言的模式?
如果你确认后者,那么可以这样理解文中:我们有一个很大的集合,有很多客户端会并发同时访问它.其中一个特别的客户端要进行连续的数据获取,此时要求其他客户端不能再向集合中增加或删除 东东.
不要被技术细节或比喻误导。
|
|
|
|