码迷,mamicode.com
首页 > 其他好文 > 详细

基础之ThreadStatic

时间:2016-02-21 22:53:36      阅读:285      评论:0      收藏:0      [点我收藏+]

标签:

    public class Bean
    {
        public Bean()
        {
            
        }
        
        public static String Current {
            get {
                if (guid == null)
                    guid = Guid.NewGuid().ToString();
                return guid; 
            }
        }
        public static String Current2 {
            get {
                if (guid2 == null)
                    guid2 = Guid.NewGuid().ToString();
                return guid2; 
            }
        }
        
        [ThreadStatic]
        public static String guid;
        public static String guid2;
    }
            for (int i = 0; i < 3; i++) {
                new Thread(() => {
                    Console.WriteLine(Bean.Current.ToString());
                    Console.WriteLine(Bean.Current2.ToString());       
                }).Start();
            }
概述:
标记为 ThreadStaticAttribute 的静态字段不在线程之间共享。
每个执行线程都有单独的字段实例,并且独立地设置及获取该字段的值。
如果在不同的线程中访问该字段,则该字段将包含不同的值。
 
使用场景:
例如通过 [ThreadStatic] private static string ThreadId; 可以标记一个自己生成的Thread ID,这样这个独立的线程中所的所有事情可以通过这个ID来识别,可以生成这个线程的程序流水作业日志等。
 
注意:
建议不要为标记为 ThreadStaticAttribute 的字段指定初始值,因为这样的初始化只会发生一次,因此在类构造函数执行时只会影响一个线程。在不指定初始值的情况下,如果它是值类型,可依赖初始化为其默认值的字段,如果它是引用类型,则可依赖初始化为空引用的字段。

基础之ThreadStatic

标签:

原文地址:http://www.cnblogs.com/wujf/p/5205737.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!