ThreadLocal<T> 类

定义

提供数据的线程本地存储。

C#
public class ThreadLocal<T> : IDisposable

类型参数

T

指定按线程存储的数据类型。

继承
ThreadLocal<T>
实现

示例

下面的示例演示如何使用 ThreadLocal<T>

C#
using System;
using System.Threading;
using System.Threading.Tasks;

class ThreadLocalDemo
{
    
        // Demonstrates:
        //      ThreadLocal(T) constructor
        //      ThreadLocal(T).Value
        //      One usage of ThreadLocal(T)
        static void Main()
        {
            // Thread-Local variable that yields a name for a thread
            ThreadLocal<string> ThreadName = new ThreadLocal<string>(() =>
            {
                return "Thread" + Thread.CurrentThread.ManagedThreadId;
            });

            // Action that prints out ThreadName for the current thread
            Action action = () =>
            {
                // If ThreadName.IsValueCreated is true, it means that we are not the
                // first action to run on this thread.
                bool repeat = ThreadName.IsValueCreated;

                Console.WriteLine("ThreadName = {0} {1}", ThreadName.Value, repeat ? "(repeat)" : "");
            };

            // Launch eight of them.  On 4 cores or less, you should see some repeat ThreadNames
            Parallel.Invoke(action, action, action, action, action, action, action, action);

            // Dispose when you are done
            ThreadName.Dispose();
        }
}
// This multithreading example can produce different outputs for each 'action' invocation and will vary with each run.
// Therefore, the example output will resemble but may not exactly match the following output (from a 4 core processor):
// ThreadName = Thread5 
// ThreadName = Thread6 
// ThreadName = Thread4 
// ThreadName = Thread6 (repeat)
// ThreadName = Thread1 
// ThreadName = Thread4 (repeat)
// ThreadName = Thread7 
// ThreadName = Thread5 (repeat)

构造函数

ThreadLocal<T>()

初始化 ThreadLocal<T> 实例。

ThreadLocal<T>(Boolean)

初始化 ThreadLocal<T> 实例并指定是否可从任意线程访问所有值。

ThreadLocal<T>(Func<T>)

使用指定的 valueFactory 函数初始化 ThreadLocal<T> 实例。

ThreadLocal<T>(Func<T>, Boolean)

使用指定的 valueFactory 函数和指示是否可从任意线程访问所有值的标志初始化 ThreadLocal<T> 实例。

属性

IsValueCreated

获取是否在当前线程上初始化 Value

Value

获取或设置当前线程的此实例的值。

Values

获取一个列表,其中包含所有已访问此实例的线程存储的值。

方法

Dispose()

释放 ThreadLocal<T> 类的当前实例所使用的所有资源。

Dispose(Boolean)

释放该 ThreadLocal<T> 实例使用的资源。

Equals(Object)

确定指定对象是否等于当前对象。

(继承自 Object)
Finalize()

释放该 ThreadLocal<T> 实例使用的资源。

GetHashCode()

作为默认哈希函数。

(继承自 Object)
GetType()

获取当前实例的 Type

(继承自 Object)
MemberwiseClone()

创建当前 Object 的浅表副本。

(继承自 Object)
ToString()

创建并返回当前线程的此实例的字符串表示形式。

适用于

产品 版本
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7
.NET Framework 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0

线程安全性

除此外 Dispose(),所有公共成员和受保护成员 ThreadLocal<T> 都是线程安全的,并且可以从多个线程并发使用。 为 Value 属性 IsValueCreated 返回的值特定于访问属性的线程。

另请参阅