我一直在寻找一种模式,能够提供同一类的线程安全和不安全版本。这种技术方面非常明显。我想是希望找到命名/访问约定等...

因此,在“ 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方法,允许需要线程安全的用户获得线程安全的版本。

对象的同步版本除了线程安全性之外没有添加任何其他功能。他们不会公开任何新成员,知道他们的底层类型也无济于事。因此,它们被设为私有,并像公共/基类一样简单地“看起来”。

08-27 22:23