• ThreadStatic特性


    文章:ThreadStatic特性

    地址:https://www.cnblogs.com/xuejietong/p/10997385.html

    带有threadStaticAttribute标记的静态字段在线程之间不共享。每个执行线程都有一个单独的字段实例,并独立地设置和获取该字段的值。

    如果在不同的线程上访问该字段,则它将包含不同的值。除了将threadStaticAttribute属性应用于字段之外,还必须将其定义为静态字段(在C中)或共享字段(在Visual Basic中)。不要为标记为threadStaticAttribute的字段指定初始值,因为此类初始化仅在类构造函数执行时发生一次(静态构造函数),因此只影响一个线程。

    研究农业银行的支付接口demo时,发现代码中使用了这个特性:

    using System;
    using System.Collections;
    using System.Collections.Generic;
    using System.Text;
    
    namespace com.abc.trustpay.client
    {
        public class JSON
        {
            [ThreadStatic]
            private static string iJsonString = "";
    
            public static void setJsonString(string aJsonString)
            {
                JSON.iJsonString = aJsonString.Trim();
            }
    
            public static string WriteDictionary(IDictionary dic)
            {
                StringBuilder stringBuilder = new StringBuilder("");
                bool flag = false;
                stringBuilder.Append("{");
                foreach (DictionaryEntry dictionaryEntry in dic)
                {
                    if (flag)
                    {
                        stringBuilder.Append(",");
                    }
                    stringBuilder.Append(""");
                    stringBuilder.Append(dictionaryEntry.Key);
                    stringBuilder.Append("":");
                    stringBuilder.Append(""");
                    stringBuilder.Append(dictionaryEntry.Value);
                    stringBuilder.Append(""");
                    flag = true;
                }
                return stringBuilder.ToString();
            }
    
            public static string WriteDictionarys(IDictionary dic)
            {
                StringBuilder stringBuilder = new StringBuilder("");
                bool flag = false;
                stringBuilder.Append("[");
                foreach (int num in dic.Keys)
                {
                    if (flag)
                    {
                        stringBuilder.Append("},");
                    }
                    string value = JSON.WriteDictionary((IDictionary)dic[num]);
                    stringBuilder.Append(value);
                    flag = true;
                }
                stringBuilder.Append("}]");
                return stringBuilder.ToString();
            }
    
            public static string GetKeyValue(string aTag)
            {
                string text = JSON.iJsonString;
                int num = text.IndexOf(aTag);
                string result;
                if (num == -1)
                {
                    result = "";
                }
                else
                {
                    while (!text.Substring(num - 1, 1).Equals(""") || !text.Substring(num + aTag.Length, 1).Equals("""))
                    {
                        num = text.IndexOf(aTag, num + 1);
                        if (num == -1)
                        {
                            result = "";
                            return result;
                        }
                    }
                    int length = aTag.Length;
                    num = num + length + 2;
                    string text2 = "";
                    char c = text[num];
                    if (c == '{')
                    {
                        text2 = JSON.GetObjectValue(num, aTag, text);
                    }
                    if (c == '"')
                    {
                        text2 = JSON.GetStringValue(num, aTag, text);
                    }
                    result = text2;
                }
                return result;
            }
    
            private static string GetObjectValue(int index, string aTag, string json)
            {
                int num = 0;
                StringBuilder stringBuilder = new StringBuilder();
                char c;
                while (true)
                {
                    c = json[index];
                    if (c == '{')
                    {
                        num++;
                    }
                    if (c == '}')
                    {
                        num--;
                    }
                    if (num == 0)
                    {
                        break;
                    }
                    stringBuilder.Append(c);
                    index++;
                }
                stringBuilder.Append(c);
                return stringBuilder.ToString();
            }
    
            private static string GetStringValue(int index, string aTag, string json)
            {
                StringBuilder stringBuilder = new StringBuilder();
                index++;
                while (true)
                {
                    char c = json[index++];
                    if (c == '"')
                    {
                        break;
                    }
                    stringBuilder.Append(c);
                }
                return stringBuilder.ToString();
            }
    
            public static Dictionary<int, Hashtable> GetArrayValue(string aTag)
            {
                string text = JSON.iJsonString;
                Dictionary<int, Hashtable> dictionary = new Dictionary<int, Hashtable>();
                Hashtable hashtable = new Hashtable();
                StringBuilder stringBuilder = new StringBuilder();
                int num = text.IndexOf(aTag);
                Dictionary<int, Hashtable> result;
                if (num == -1)
                {
                    result = dictionary;
                }
                else
                {
                    int length = aTag.Length;
                    num = num + length + 2;
                    int num2 = 0;
                    while (true)
                    {
                        char c = text[num++];
                        if (c != '[')
                        {
                            if (c != ']')
                            {
                                stringBuilder.Append(c);
                            }
                            if (c == '}')
                            {
                                c = text[num++];
                                hashtable.Add(num2, stringBuilder);
                                num2++;
                                stringBuilder = new StringBuilder();
                            }
                            if (c == ']')
                            {
                                break;
                            }
                        }
                    }
                    if (hashtable.Count == 0)
                    {
                        result = dictionary;
                    }
                    else
                    {
                        dictionary = JSON.ParseArray(hashtable);
                        result = dictionary;
                    }
                }
                return result;
            }
    
            public static Dictionary<int, Hashtable> ParseArray(Hashtable hts)
            {
                Dictionary<int, Hashtable> dictionary = new Dictionary<int, Hashtable>();
                Hashtable value = new Hashtable();
                foreach (int num in hts.Keys)
                {
                    string json = hts[num].ToString();
                    value = JSON.ParseString(json);
                    dictionary.Add(num, value);
                    value = new Hashtable();
                }
                return dictionary;
            }
    
            public static Hashtable ParseString(string json)
            {
                StringBuilder stringBuilder = new StringBuilder();
                Hashtable hashtable = new Hashtable();
                int num = json.IndexOf("{");
                int length = json.Length;
                json = json.Substring(num + 1, length - 2);
                json = json.Replace(""", "");
                string[] array = json.Split(new char[]
                {
                    ','
                });
                string[] array2 = new string[2];
                for (int i = 0; i < array.Length; i++)
                {
                    array2 = array[i].Split(new char[]
                    {
                        ':'
                    });
                    hashtable.Add(array2[0], array2[1]);
                }
                return hashtable;
            }
        }
    }
  • 相关阅读:
    bash 中 () {} [] [[]] (()) 的解释
    正则表达式速查笔记
    Makefile速查笔记
    gflags 编译动态库
    在Win10上运行ESXI-Comstomer
    GNU g++常用编译选项用法
    C++标准转换运算符reinterpret_cast
    BZOJ 3211: 花神游历各国【线段树区间开方问题】
    BZOJ 1597: [Usaco2008 Mar]土地购买【斜率优化+凸包维护】
    BZOJ 1046: [HAOI2007]上升序列【贪心+二分状态+dp+递归】
  • 原文地址:https://www.cnblogs.com/Tpf386/p/11851795.html
Copyright © 2020-2023  润新知