温馨提示×

c# threadlocal能用于静态字段吗

c#
小樊
81
2024-11-27 13:54:26
栏目: 编程语言

是的,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。我们提供了 SetValueGetValue 方法来设置和获取线程局部变量的值。在 Main 方法中,我们设置了一个值并在同一线程中获取它。然后我们创建了一个新线程,在该线程中设置了另一个值并获取了它。请注意,每个线程都有其自己的 _threadLocalValue 副本,因此主线程和新线程中的值是独立的。

0