我推荐的解决方法
参考类库的实现,提供没有同步的原始类,及有同步的代理类;早期的jdk中vector及hashtable都是同步的类,新的arraylist及hashmap都不是同步的,collections提供了静态方法返回同步代理;当在多线程环境中需要更改集合时,使用代理类
|
[c#,多线程环境中使用同步代理的客户类代码] public class someclass { public someclass(ilist source){ attrs = arraylist.synchronized(source); } public void add(string name){ attrs.add(name); } public void remove(string name){ attrs.remove(name); } } [c#,单线程环境中使用同步代理的客户类代码] public class otherclass{ public otherclass(ilist source){ attrs = source; } public void add(string name){ attrs.add(name); } public void remove(string name){ attrs.remove(name); } } |
[java,多线程环境中使用同步代理的客户类代码] public class someclass { public someclass (list source){ attrs = collections.synchronizedlist(source); } public void add(string name){ attrs.add(name); } } [java,单线程环境中使用同步代理的客户类代码] public class otherclass{ public otherclass(list source){ attrs = source; } public void add(string name){ attrs.add(name);
本文关键:The Programming Language Tips
相关方案
|