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

  • 相关阅读:
    Django——不同版本
    04爬取拉勾网Python岗位分析报告
    24 两两交换链表中的节点
    UniGUI学习之UniImage(39)
    Delphi7开发简单文件传输
    Javaday03(补充day02运算符,流程控制)
    java中代码块,构造方法和普通方法的代码执行顺序
    +=隐式类型转换
    关于switch中的default
    Java操作JSON数据(5)--jettison操作JSON数据
  • 原文地址:https://www.cnblogs.com/vakeynb/p/6486925.html
Copyright © 2011-2022 走看看