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的静态字段之前,都要进行初始化,否则仅有当前的一个线程得到该初始值

  • 相关阅读:
    Python动态展示遗传算法求解TSP旅行商问题
    MOEAD算法中均匀权向量的实现---Python
    HDU 5294 多校第一场1007题 最短路+最小割
    POJ 3261 Milk Patterns sa+二分
    HDU 4292 FOOD 2012 ACM/ICPC Asia Regional Chengdu Online
    CodeForces 201A Clear Symmetry
    POJ 1679 The Unique MST 确定MST是否唯一
    POJ 3268 Silver Cow Party 最短路 基础题
    POJ 2139 SIx Degrees of Cowvin Bacon 最短路 水題
    POJ2229 Sumsets 基礎DP
  • 原文地址:https://www.cnblogs.com/vakeynb/p/6486925.html
Copyright © 2011-2022 走看看