C# 多线程调用静态方法或者静态实例中的同一个方法-方法内部的变量是线程安全的

C#  多线程调用静态方法或者静态实例中的同一个方法-方法内部的变量是线程安全的

C#  多线程调用静态方法或者静态实例中的同一个方法-方法内部的变量是线程安全的

using System;
using System.Threading;
using System.Threading.Tasks;
using System.Diagnostics;
using System.Reflection;

namespace MulThreadTest
{
class MainClass
{

public static void Main (string[] args)
{

for (int i = 0; i < 2; i++) {
var th=new Thread(
new ParameterizedThreadStart((state)=>{
DoHelper.Instance.SayHello(state.ToString());
})
);
th.Start (i);
}

Console.ReadKey ();

}

}

public class DoHelper{

public static DoHelper Instance=new DoHelper();

public string SayHello(string id){

string res = "调用Id:" + id;
StackTrace trace = new StackTrace(true);
StackFrame frame = trace.GetFrame(1);//1代表上级,2代表上上级,以此类推
MethodBase method = frame.GetMethod(); //获得当前方法名称

Console.WriteLine (res);
Console.WriteLine ("当前方法的Hash code: "+method.GetHashCode());
/*if (id=="1") {
System.Threading.Thread.Sleep (5000);
}
*/
System.Threading.Thread.Sleep (1000);

Console.WriteLine ("当前线程上下文Id:"+Thread.CurrentContext.ContextID);
Console.WriteLine ("当前线程Id:"+Thread.CurrentThread.ManagedThreadId);
Console.WriteLine ("当前时间:"+DateTime.Now.ToString());
Console.WriteLine ("当前Trace hashcode :"+trace.GetHashCode());//Variables declared inside methods (with the possible exception of "captured" variables) are isolated,

return res;
}

}
}

上一篇:JSP常见的7个动作指令


下一篇:Java虚拟机4:Java对象创建和对象访问