我看到
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
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
ThreadA与ThreadB分别通过自己拥有的ClassA对象的引用找到各自的对象,所以,是访问各自new的对象中的ab
那主存中对象对每个线程都是共享的,那threadA只要有别的对象的引用那也能引用了??即使这个对象不是threadA创建的
在一个方法中new一个对象,如果调用该方法,调用完该方法中该方法中分配的内存即方法栈内存会被回收(在没有外界的引用的情况下),
我想问的是如果在该方法中new一个Thread类型的对象,那方法调用完毕后,Thread类型的对象所在的内存又是怎样处理的
线程持有对象的引用是私有的,不是共享的,如果主存中也存在指向相同对象的引用,那的确是所有线程都共享的,如果你把私有的引用值赋给主存中的一个同类型的引用,其他的所有线程就应该都可以访问到这个对象了,因为主存中的引用是被所有线程共享的
这是我的理解,我在看《深入JAVA虚拟机》,这本书挺好的,推荐你看一下