说明
ThreadLocal 是 C# 中的一个线程本地存储类,它提供了一种简单的方式来存储线程特定数据。每个 ThreadLocal 实例都会维护一个 T 类型的值副本列表,其中每个线程都有自己的独立副本。这样,不同线程之间就可以独立地访问和修改该数据,而不会相互影响。
具体来说,当使用 ThreadLocal 时,每个线程都会得到一个 T 类型的副本,可通过 Value 属性进行访问和修改。如果某个线程修改了它的副本,则其他线程不会受到影响。在处理多线程应用程序时,ThreadLocal 可以帮助您避免竞争条件和线程之间的冲突。
示例代码
using System.Collections.Generic;
using System.Threading;
namespace xxxx.ThreadLocal
{
/// <summary>
/// ThreadLocal 使用
/// </summary>
public class ThreadLocalDic
{
/// <summary>
/// 保存 线程变量副本
/// </summary>
private static ThreadLocal<Dictionary<string, string>> NAMESPACE = new ThreadLocal<Dictionary<string, string>>(() => new Dictionary<string, string>());
/// <summary>
/// 保存 数据
/// </summary>
/// <param name="key">键</param>
/// <param name="value">值</param>
public static void Set(string key, string value)
{
var keyValues = NAMESPACE?.Value;
if (keyValues == null)
{
return;
}
if (keyValues.ContainsKey(key))
{
return;
}
keyValues?.Add(key, value);
}
/// <summary>
/// 获取值
/// </summary>
/// <returns>线程副本</returns>
public static Dictionary<string, string> Get()
{
return NAMESPACE?.Value;
}
/// <summary>
/// 移除信息
/// </summary>
public static void Remove()
{
NAMESPACE?.Value?.Clear();
}
}
}