猿问

ThreadStatic变量与实例化

如果ThreadStatic在静态字段上设置标志,则运行的每个线程将具有一个单独的变量,因此,如果您有一个static int字段和一个方法,其值仅递增其值5次,则在两个单独的线程上启动该方法只会给您两个单独的整数的值为5,而不是值为10的值。

在那种情况下,这种方法与为每个线程实例化一个非静态字段之间有什么区别?


智慧大石
浏览 196回答 1
1回答

尚方宝剑之说

ThreadStaticAttribute&nbsp;装饰有:[AttributeUsageAttribute(AttributeTargets.Field,&nbsp;Inherited&nbsp;=&nbsp;false)]因此,您不能将其应用于方法,只能应用于字段。每个线程有效地具有一个与该字段相对应的自变量。但是它只能应用于静态字段-您不能拥有“每个实例和每个线程”字段,而这正是您实际上要的。现在是的,如果您对运行代码的线程有足够的控制权,那么您可以为每个线程创建一个单独的对象,并使用实例字段代替,那么,是的,这是一个很好的替代方案ThreadStatic。但是,情况并非总是如此。有时您需要编写可以从多个线程调用的代码,但是不能很好地将每个线程划分为一个单独的对象。ThreadStatic对此很有用。话虽如此,我通常会使用ThreadLocal<T>而不是ThreadStatic作为替代方法来获取每个线程的数据。附带说明一下,方法内不能有静态变量。您只能在方法中声明局部变量,它们既不是静态字段也不是实例字段-它们只是局部变量。您可以有一个仅在单个方法中使用的静态字段,但这与在该方法中声明变量不同。
随时随地看视频慕课网APP
我要回答