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;
}
}
}