文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>ThreadStatic特性标记静态字段对多线程执行的影响

ThreadStatic特性标记静态字段对多线程执行的影响

时间:2011-01-14  来源:b0b0

ThreadStaticAttribute

指示静态字段的值对于每个线程都是唯一的。用 ThreadStaticAttribute 标记的 static 字段不在线程之间共享。每个执行线程都有单独的字段实例,并且独立地设置及获取该字段的值。如果在不同的线程中访问该字段,则该字段将包含不同的值。

示例代码

 

代码 using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading;

namespace NetThreading

{

/// <summary>

/// 测试一般静态字段与有ThreadStatic 标记的静态字段在

/// 多线程执行中的区别

/// </summary>

public class TheadStaticAttributeApp:IMain

{

#region IMain 成员

public void MainRun()

{

MyStaticFiledClass myStaticTest = new MyStaticFiledClass();

ThreadStart ts1 = new ThreadStart(myStaticTest.AddXY);

Thread t1 = new Thread(ts1);

Thread t2 = new Thread(ts1);

t1.Start();

t2.Start();

}

#endregion

}

/// <summary>

/// MyStaticTest

/// </summary>

class MyStaticFiledClass

{

/// <summary>

/// 一般静态变量

/// </summary>

static int X=0;

/// <summary>

/// 有ThreadStatic标记的静态变量

/// </summary>

[ThreadStatic]

static int threadStaticX=0;

/// <summary>

/// 分别对x,y 自增

/// </summary>

public void AddXY()

{

for (int i = 0; i < 10; i++)

{

X++;

threadStaticX++;

Thread current = Thread.CurrentThread;

string info = string.Format("threadID:{0} x={1}; [ThreadStatic]threadStaticX={2}", current.ManagedThreadId, X, threadStaticX);

Console.WriteLine(info);

Thread.Sleep(500);

}

}

}

}

 

 

运行结果

分析

具有ThreadStatic标记的静态变量,在每个线程中都有自己的副本。

一般静态变量测试在进程之间共享的。t1线程中对X的修改与t2线程

对X的修改会累积,所以x的值会是20。而对于threadStaticX来说t1

与t2都是各自拥有的threadStaticX副本,所以threadStaticX的值为

10.

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载