是的,C# ThreadLocal
可以用于静态字段。ThreadLocal<T>
类允许您为每个线程存储一个独立的值副本。当您将 ThreadLocal<T>
应用于静态字段时,每个线程都将具有其自己的静态字段副本。
以下是一个使用 ThreadLocal<T>
的静态字段的示例:
using System;
using System.Threading;
public class MyClass
{
// 使用 ThreadLocal<T> 静态字段
private static readonly ThreadLocal<int> _threadLocalValue = new ThreadLocal<int>();
public static void SetValue(int value)
{
_threadLocalValue.Value = value;
}
public static int GetValue()
{
return _threadLocalValue.Value;
}
}
class Program
{
static void Main(string[] args)
{
// 设置线程局部变量的值
MyClass.SetValue(10);
// 在同一线程中获取值
Console.WriteLine("Main thread value: " + MyClass.GetValue());
// 创建一个新线程
Thread newThread = new Thread(() =>
{
// 在新线程中设置值
MyClass.SetValue(20);
// 在新线程中获取值
Console.WriteLine("New thread value: " + MyClass.GetValue());
});
newThread.Start();
newThread.Join();
}
}
输出:
Main thread value: 10
New thread value: 20
在这个示例中,我们有一个名为 MyClass
的类,它具有一个静态 ThreadLocal<int>
字段 _threadLocalValue
。我们提供了 SetValue
和 GetValue
方法来设置和获取线程局部变量的值。在 Main
方法中,我们设置了一个值并在同一线程中获取它。然后我们创建了一个新线程,在该线程中设置了另一个值并获取了它。请注意,每个线程都有其自己的 _threadLocalValue
副本,因此主线程和新线程中的值是独立的。