首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ThreadLocal性质

ThreadLocal性质
EN

Stack Overflow用户
提问于 2011-05-01 22:29:50
回答 2查看 2.3K关注 0票数 2

如果我们有一个ThreadLocal属性(每个线程都有它的唯一属性),那么哪一个是正确的(我们不想使用自动设置器/getter):

A)

代码语言:javascript
复制
private ThreadLocal<MyClass> _someProperty = new ThreadLocal<MyClass>();

public ThreadLocal<MyClass> SomeProperty
{
    get
    {
        return _someProperty.Value;
    }
    set
    {
        _someProperty.Value = value;
    }
}

B)

代码语言:javascript
复制
private ThreadLocal<MyClass> _someProperty = new ThreadLocal<MyClass>();

public MyClass SomeProperty
{
    get
    {
        return _someProperty.Value;
    }
    set
    {
        _someProperty.Value = value;
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-05-01 22:33:25

我假设您希望封装ThreadLocal<T>,以便调用方只需要了解MyClass;在这种情况下,仍然需要显式地访问.Value,因为这就是每线程魔术发生的地方:

代码语言:javascript
复制
private readonly ThreadLocal<MyClass> _someProperty = new ThreadLocal<MyClass>();

public MyClass SomeProperty
{
    get { return _someProperty.Value; }
    set { _someProperty.Value = value; }
}
票数 4
EN

Stack Overflow用户

发布于 2011-05-01 22:32:52

您应该使用第二种形式,以确保您控制何时设置该值。

如果直接公开ThreadLocal,则调用方可以编写SomeProperty.Value = null,因此无法阻止它。

通过强制所有访问都通过您的类,您可以添加验证到setter。

另外,第一个表单允许一个线程通过替换整个ThreadLocal实例来擦除其他线程上的属性值。

注意,您的代码不会编译;您需要返回并设置.Value

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5851893

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档