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

}
}

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

  1. 关于VUE调用父实例($parent) 根实例 中的数据和方法

    this.$parent或者 this.$root 在子组件中判断this.$parent获取的实例是不是父组件的实例 在子组件中console.log(this.$parent)  在父组件中con ...

  2. FreeMarker调用Java静态方法以及静态变量的方法

    这里介绍下在类似 Spring+FreeMarker 的架构中如何在FreeMarker中访问Java中的静态方法以及静态变量. 一.首先为了方便以及可复用我们创建一个工具类 /** * FreeMa ...

  3. linux C 刚初始化后的一个变量在调用一个静态库中函数后被异常修改为乱码

    linux C 中声明并初始化一个变量const char a[512]="test";后,接着调用了一个静态库中的函数函数test(b);,a并没有传入test函数,但在调用这个 ...

  4. OGNL调用静态方法和属性

    ognl的全名是 Object-Graph Navigation Language 表示的是图对象导航语言...我觉得它最厉害的一点是,通过"."来实现对象的导航...下面看他他的 ...

  5. Java中实例方法,实例变量,静态方法,静态变量,final方法重写的问题,覆盖

    Java中只有非私有的实例方法能被重写,即实现多态,子类可以覆盖父类的方法,但是实例变量不能覆盖,若子类和父类均定义了同样名称的变量,则对于子类来说这是两个不同的变量,要想调用父类的变量必须显示去调用 ...

  6. C#中静态类、静态方法和静态变量的简单说明

    静态方法与静态变量一样,属于类本身,而不属于哪个类的一个对象.调用一个被定义为static的方法,只有通过在它前面加上这个类的名称.一般定义里说是可以通过实例调用的.其他语言我还没测试,但是在C#中是 ...

  7. java中的静态变量、静态方法与静态代码块详解与初始化顺序

      我们知道类的生命周期分为装载.连接.初始化.使用和卸载的五个过程.其中静态代码在类的初始化阶段被初始化. 而非静态代码则在类的使用阶段(也就是实例化一个类的时候)才会被初始化. 静态变量 可以将静 ...

  8. 区别JS中类的静态方法,静态变量,实例方法,实例变量

    1.类的静态方法 先来段代码之后分析 // JS类静态函数 function BaseClass() { } // 类添加add函数 BaseClass.add = function() { cons ...

  9. java静态类、静态方法、静态代码块,静态变量及实例方法,实例变量初始化顺序及内存管理,机制

    1.当一个类被第一次使用时,它需要被类加载器加载,而加载过程涉及以下两点: (1)在加载一个类时,如果它的父类还未被加载,那么其父类必须先被加载: (2)当类加载到内存之后,按照在代码中的出现顺序执行 ...

随机推荐

  1. --mysql 导出数据时, 数字类型的列如果位数过长,变为科学计数法问题

    --mysql 导出数据时, 数字类型的列如果位数过长,变为科学计数法问题在字段前加上\t即可select concat('\t',a.IDCARD_NO) from xxx a

  2. JAVA项目中常用的异常处理情况

    1.数学运算异常( java.lang.arithmeticexception) 程序中出现了除以零这样的运算就会出这样的异常,对这种异常,大家就要好好检查一下自己程序中涉及到数学运算的地方,公式是不 ...

  3. ECMAScript6 入门 变量的解析赋值

    ES6 允许按照一定模式,先=从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring). 这句话的解释:第一步从数组或者对象中提取值,第二步将提取到的值对变量进行赋值 数组的解 ...

  4. python实现链表(二)

    class SingleNode(object): """单链表的结点""" def __init__(self,item): # _ite ...

  5. Xamarin Essentials教程获取路径文件系统FileSystem

    Xamarin Essentials教程获取路径文件系统FileSystem 文件系统用于管理设备内的各类文件.通过文件系统,应用程序可以创建永久文件和临时文件,也可以获取预先打包的文件,如预设数据库 ...

  6. JavaScript基础笔记(四) JS式面向对象

    JS式面向对象 一.理解对象 一)属性类型 ECMA-262 第 5 版在定义只有内部才用的特性(attribute)时,描述了属性(property)的各种特征. ECMA-262 定义这些特性是为 ...

  7. Scrapy基础(八)————图片下载后将本地路径添加到Item中

    前边讲到简单的图片下载,但是怎样将图片的本地路径和存储在Item中的数据对应起来,所以本篇博文讲解到如何将 本地的下载后的图片路径写入到Item中 思路:自定义pipline,多加个管道,该管道继承下 ...

  8. npm install出现"Unexpected end of JSON input while parsing near"

    打开命令行输入 npm cache clean --force 重新npm i,即可解决报错

  9. BZOJ1897 : tank 坦克游戏

    设$f[i][j][k]$表示坦克位于$(i,j)$,目前打了不超过$k$个位置的最大得分. 初始值$f[1][1][k]$为在$(1,1)$射程内最大$k$个位置的分数总和. 对于每次移动,会新增一 ...

  10. BZOJ2670 : Almost

    求出前缀和$s[]$,那么区间$[l,r]$的几乎平均数$=\frac{s[r]-s[l-1]}{r-l}$. 若只有一个询问,那么可以维护$(i,s[i-1])$的凸壳,在凸壳上二分点$(i,s[i ...