我看到
public class classA {
    String a;
    String b;
    public void method() {
     string c;
}
}
回复了ab在主存中c在工作内存中并有ab的拷贝我想问一下 如果ThreadA中new了一个classA 
ThreadB中new了一个classA    主存中岂不是有了两个a和两个b
而上面提到:  Java中所有变量都储存在主存中,对于所有线程都是共享的     两个进程到底访问哪个ab

解决方案 »

  1.   

    既然是在线程中new的,那这两个对象的引用变量应该分别在两个线程的工作内存中,是私有的局部变量。
    ThreadA与ThreadB分别通过自己拥有的ClassA对象的引用找到各自的对象,所以,是访问各自new的对象中的ab
      

  2.   

    两个线程各自的私有的对象引用找到各自的对象,
    那主存中对象对每个线程都是共享的,那threadA只要有别的对象的引用那也能引用了??即使这个对象不是threadA创建的
      

  3.   

    还想问一个:
    在一个方法中new一个对象,如果调用该方法,调用完该方法中该方法中分配的内存即方法栈内存会被回收(在没有外界的引用的情况下),
    我想问的是如果在该方法中new一个Thread类型的对象,那方法调用完毕后,Thread类型的对象所在的内存又是怎样处理的
      

  4.   

    主存中存储的是所有的程序的变量,而不是对象
    线程持有对象的引用是私有的,不是共享的,如果主存中也存在指向相同对象的引用,那的确是所有线程都共享的,如果你把私有的引用值赋给主存中的一个同类型的引用,其他的所有线程就应该都可以访问到这个对象了,因为主存中的引用是被所有线程共享的
    这是我的理解,我在看《深入JAVA虚拟机》,这本书挺好的,推荐你看一下