我行我素

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

今天在这里看到一篇关于Thread.SetData的文章,忽然想起了ThreadStatic特性一样可使变量线程唯一,于是修改了一下代码测试下:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading;
 6 
 7 namespace ThreadSetDataTest
 8 {
 9     class Program
10     {
11         static void Main(string[] args)
12         {
13             Thread[] t = new Thread[4];
14             for (int i = 0; i < t.Length; i++)
15             {
16                 t[i] = new Thread( new ThreadStart(Slot.SlotTest));
17                 t[i].Start();
18             }
19         }
20     }
21 
22     class Slot
23     {
24         static Random randomGenerator = new Random();
25 
26         /// <summary>
27         /// 线程唯一的变量
28         /// </summary>
29         [ThreadStatic]
30         public static int threadStaticData;
31 
32         public static void SlotTest()
33         {
34             // 在每条线程中设置随机的值
35             Thread.SetData(Thread.GetNamedDataSlot("Random"), randomGenerator.Next(0200));
36 
37             // 同样在每条线程中设置随机的值
38             threadStaticData = randomGenerator.Next(10100);
39 
40             Console.WriteLine("Data is Thread_{0}'s data solt :{1,3}, ThreadStatic Data is {2}",
41                 AppDomain.GetCurrentThreadId(),
42                 Thread.GetData(Thread.GetNamedDataSlot("Random")).ToString(), threadStaticData);
43 
44             Thread.Sleep(1000);
45 
46             Console.WriteLine("Data is Thread_{0}'s data solt :{1,3},ThreadStatic Data is {2}",
47                 AppDomain.GetCurrentThreadId(),
48                 Thread.GetData(Thread.GetNamedDataSlot("Random")).ToString(), threadStaticData);
49 
50             Thread.Sleep(1000);
51 
52             Other o = new Other();
53             o.ShowSoltData();
54         }
55 
56     }
57 
58     class Other
59     {
60         public void ShowSoltData()
61         {
62             Console.WriteLine("Data is Thread_{0}'s data solt :{1,3},ThreadStatic Data is {2}",
63                AppDomain.GetCurrentThreadId(),
64                Thread.GetData(Thread.GetNamedDataSlot("Random")).ToString(), Slot.threadStaticData);
65         }
66     }
67 }
68 

出来结果:

posted on 2008-09-24 21:28  非鸟^  阅读(1050)  评论(1编辑  收藏  举报