首页 > 学院 > 开发设计 > 正文

多线程中变量的内存分配

2019-11-14 16:19:41
字体:
来源:转载
供稿:网友
using System;using System.Collections.Generic;using System.Text;using System.Threading;using System.Diagnostics;namespace TestMultiThread{    class PRogram    {        pp s = new pp();        static void Main(string[] args)        {            Program dd = new Program();            Thread th;            for (int i = 0; i < 10; i++)            {                th= new Thread(new ThreadStart(dd.Test));                th.Name = i.ToString();                th.Start();                Thread.Sleep(10);            }            Console.WriteLine("wait 3 seconds");            Console.ReadKey();        }        public void Test()        {            Int32 i = 0;            i++;            Console.WriteLine("name:{0}/I vaule:{1}", Thread.CurrentThread.Name,i.ToString());            s.ps();        }    }    class pp    {         public void ps()        {            Int32 i=0;            Thread.Sleep(3000);            i++;            Console.WriteLine("ps:name:{0}/i:{1}", Thread.CurrentThread.Name,i.ToString());        }    }}

 

 

  • 发起N个线程,线程的方法体中再调用其他类的方法,这些被调用的方法也会在内存中开辟出N个空间,且都是单独存在,互补干扰。
  • 发起N个线程,每个线程的方法体会开辟新的内存空间,每个方法体中的局部变量是独立存在互补干扰的。

测试代码:

 

  •  发起10个线程,每个线程里的 i 值都为1。说明每个线程方法提都有自己的内存空间。
  •  发起10个线程,每个线程再调用ps()方法,ps()方法体体休眠3秒,然后打印信息到控制台。显示效果为10个线程启动,再等待3秒后,瞬间打印10次ps()内的信息,说明线程方法体里调用其他类方法,这些类方法也会分配多个内存空间。如果ps()使用同一个内存空间,控制台信息会每隔3秒打印一次。

 


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表