为了账号安全,请及时绑定邮箱和手机立即绑定

ThreadStatic变量与实例化

ThreadStatic变量与实例化

C#
智慧大石 2021-04-01 10:15:27
如果ThreadStatic在静态字段上设置标志,则运行的每个线程将具有一个单独的变量,因此,如果您有一个static int字段和一个方法,其值仅递增其值5次,则在两个单独的线程上启动该方法只会给您两个单独的整数的值为5,而不是值为10的值。在那种情况下,这种方法与为每个线程实例化一个非静态字段之间有什么区别?
查看完整描述

1 回答

?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

ThreadStaticAttribute 装饰有:

[AttributeUsageAttribute(AttributeTargets.Field, Inherited = false)]

因此,您不能将其应用于方法,只能应用于字段。每个线程有效地具有一个与该字段相对应的自变量。但是它只能应用于静态字段-您不能拥有“每个实例和每个线程”字段,而这正是您实际上要的。

现在是的,如果您对运行代码的线程有足够的控制权,那么您可以为每个线程创建一个单独的对象,并使用实例字段代替,那么,是的,这是一个很好的替代方案ThreadStatic。但是,情况并非总是如此。有时您需要编写可以从多个线程调用的代码,但是不能很好地将每个线程划分为一个单独的对象。ThreadStatic对此很有用。

话虽如此,我通常会使用ThreadLocal<T>而不是ThreadStatic作为替代方法来获取每个线程的数据。

附带说明一下,方法不能有静态变量。您只能在方法中声明局部变量,它们既不是静态字段也不是实例字段-它们只是局部变量。您可以有一个仅在单个方法中使用的静态字段,但这与在该方法中声明变量不同。


查看完整回答
反对 回复 2021-04-24
  • 1 回答
  • 0 关注
  • 195 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信