none
高难度线程问题,突然有个疑问? RRS feed

  • 问题

  • 高难度线程问题,突然有个疑问?                
    Thread th1=new Thread(kkk);
    th.start();
    thread th2=new Thread(kkk);
    th.start();

    void kkk()
    {
    int i=0;
    while(true)
    {
    i=5;
    }
    }

    我开了2个线程,2个线程都是执行同一个方法,里面有一个i变量,我想问的是,这个i变量是2个线程都共同用这个变量吗?还是说2个线程里其实都有各自的i变量对象。
    2007年8月7日 7:56

答案

  • 您的第一问题中, 两个线程将会使用自己的一份变量i拷贝. 这是因为Windows中一个线程在创建的时候会创建自己的一个stack用来分配局部变量. 您的代码中的i是一个方法的局部变量, 所以它会被分别分配在两个线程的stack上不相干扰.

    对于后面的代码, i是一个类的子field变量, 有点类似全局变量的概念. .Net中的类对象是分配在heap上面的, 所以它的子field变量也会被分配在heap上面. heap是一个进程中所有线程共享的一个存储区域, 所以, 多个线程会共享这段内存. i变量会被两个线程所共享使用.
    2007年8月7日 8:48