zoukankan      html  css  js  c++  java
  • 多线程中变量的内存分配

    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秒打印一次。
    请高手多多指教
  • 相关阅读:
    VMware6.0-vCenter的安装准备及安装
    VeeamBackup9.5安装与配置
    VeeamOne(Free Edition 9.5 )-安装与配置
    UIDatePicker
    UIImagePicker照片选择器
    UIImageView
    UILabel
    UIScrollView 期本使用方法
    UISegment
    UISlide
  • 原文地址:https://www.cnblogs.com/zhaosj/p/4120145.html
Copyright © 2011-2022 走看看