【c#】ThreadLocal的原理和详细使用示例

说明

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();
        }
    }
}

猜你喜欢

转载自blog.csdn.net/qq_38428623/article/details/131086777