线程静态

20 篇文章 0 订阅
  rel="File-List" href="file:///C:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_filelist.xml">

线程静态就是一个由System.ThreadStaticAttribute属性注释的普通的静态字段。它的存取是根据线程来指定内存位置的,所以它的存取速度较慢。如果一个程序中同时有多个线程同时访问这个字段,则每个线程访问的都是独立的threadvalue 。例如主线程设置它为Master Thread”,线程1设置它为”Thread 0” ,然后线程2设置它为” Thread 1” ,主线程读取它的时候,得到的是Master Thread。主线程设置的值在每个线程中是完全隔离的。

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using System.Threading;
  5. namespace ThreadStaticConsole
  6. {
  7.     class Program
  8.     {
  9.         [ThreadStatic]
  10.         static string data = "unset";
  11.         static void Main(string[] args)
  12.         {
  13.             Console.WriteLine("[Master] before={0}", data);
  14.             data = "Master Thread";
  15.             Console.WriteLine("[Master] after={0}", data);
  16.             Thread[] threads = new Thread[2];
  17.             for (int i = 0; i < 2; i++)
  18.             {
  19.                 threads[i] = new Thread(delegate(object j)
  20.                 {
  21.                     Console.WriteLine("[Thread{0} before={1}", j, data); data = "Thread" + j;
  22.                     Console.WriteLine("[Thread{0}] after={1}", j, data);
  23.                 });
  24.                 threads[i].Start(i);
  25.             }
  26.             Array.ForEach(threads, delegate(Thread th) { th.Join(); });
  27.             Console.WriteLine("[Master] after loop={0}", data);
  28.             Console.ReadLine();
  29.         }
  30.     

运行结果:

rel="File-List" href="file:///C:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C02%5Cclip_filelist.xml">

[Master] before=unset

[Master] after=Master Thread

[Thread0 before=

[Thread0] after=Thread0

[Thread1 before=

[Thread1] after=Thread1

[Master] after loop=Master Thread


rel="File-List" href="file:///C:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C03%5Cclip_filelist.xml"> 可以看清楚,在设置data前,每个线程看到的data值为null。该注意的是线程静态字段它只由类构造函数初始化一次,并且在只在第一次引用该字段的线程上,其他线程再访问这个字段时,为字段的类型的默认值(defalut(T)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值