zoukankan      html  css  js  c++  java
  • 线程间不共享的静态字段

    默认情况下,静态字段在同一个应用程序域中访问这些字段的所有线程间共享。但是使用ThreadStaticAttribute将任意static字段标记为线程间不可共享的。

    //例如下面代码:
    pubic class Foo { [ThreadStaticAttribute()] public static string bar="Initialized string"; }

    下面不妨做个测试:

    首先写个常规的static字段使用方法:

      public class ThreadStaticField
        {
            //定义静态变量bar
            public static string bar = "Initialized String";
            //显示静态变量值方法
            public static void DisplayStaticFieldValue()
            {
                string msg = $"测试1:{Thread.CurrentThread.GetHashCode()}" + $" 包含静态变量的值为:{bar}";
                Console.WriteLine(msg);
            }
    
    
        }
    

    那么第二种是使用了ThreadStaticAttribute的静态字段的方法:

      public class ThreadStaticField
        {
            //定义静态变量bar
            [ThreadStaticAttribute]
            public static string bar = "Initialized String";
            //显示静态变量值方法
            public static void DisplayStaticFieldValue()
            {
                string msg = $"测试2:{Thread.CurrentThread.GetHashCode()}" + $" 包含静态变量的值为:{bar}";
                Console.WriteLine(msg);
            }
    
    
        }
    

    调用方法为:

         public static void Test()
            {
                ThreadStaticField.DisplayStaticFieldValue();
                Thread newStaticFieldThread = new Thread(ThreadStaticField.DisplayStaticFieldValue);
                newStaticFieldThread.Start();
                ThreadStaticField.DisplayStaticFieldValue();
            }

    执行程序结果为:

    分析:很明显可以看到,测试1的当前线程的散列值为9,而新线程的散列值为10,其余都相同。

    测试2中bar字段仅在访问它的第一个线程中被初始化,在所有其他线程中,这个字段被初始化为null,因此要记住:在任何线程中使用标记为ThreadStaticAttribute的静态字段之前,都要进行初始化,否则仅有当前的一个线程得到该初始值

  • 相关阅读:
    1. 第一章: Python基础语法
    6. 第二章:C#委托和事件之.net framework3.5委托扩展
    5. 第二章:C#委托和事件之事件
    4. 第二章:C#委托和事件之委托
    3. 第一章:C#面向对象编程之继承和多态
    2. 第一章:C#面向对象编程之抽象和封装
    1. 序言
    Xamarin.Forms 调用腾讯地图
    全国行政区划数据大放送——包含邮政编码-电话区号-简拼-区划路径
    【记录】自定义服务器验证控件
  • 原文地址:https://www.cnblogs.com/vakeynb/p/6486925.html
Copyright © 2011-2022 走看看