我一直在寻找一种模式,能够提供同一类的线程安全和不安全版本。这种技术方面非常明显。我想是希望找到命名/访问约定等...
因此,在“ Systems.Collections”命名空间中到处都可以找到这种模式:
public class WhatEv
{
private class SyncWhatEv : WhatEv
{
// overrides IsSyncronized = true
// overrides whatever else to make it thread safe
}
public virtual bool IsSynchronized
{
get { return false; }
}
public static WhatEv Synchronized(WhatEv whatEv)
{
return new SyncWhatEv(whatEv);
}
}
有许多实现此目的的类:HashTable,Queue,ArrayList,Stack等...我了解继承。但是,为什么要使其成为一个私有的嵌套类,并让用户跳到一个箍上呢?这样做有什么好处吗?
最佳答案
在大多数情况下,不需要对象的线程安全版本(即Hashtable,Queue)。因此,添加默认情况下使其成为线程安全所需的开销没有任何意义。通过使用Synchronized方法,允许需要线程安全的用户获得线程安全的版本。
对象的同步版本除了线程安全性之外没有添加任何其他功能。他们不会公开任何新成员,知道他们的底层类型也无济于事。因此,它们被设为私有,并像公共/基类一样简单地“看起来”。