对象中的静态属性是否在多线程中共享

06-01-12 jinjian
//1.一个对象中的静态属性是否在多线程中共享
// 如下:
class test {
public static ArrayList arr = new ArrayList();
public static StringBuffer buf = new StringBuffer();
public static int i = 0;

public synchronized static void add() {
i++;
buf.append(i);
}

public static void String() {
System.out.print(buf.toString());
}
}

//2.若是共享 ,可不可以把单态中的方法改成静态方法.
// 如下:

class AAA {
private static AAA a = null;
private static StringBuffer buf = new StringBuffer();
private AAA() {
}

public static synchronized AAA getInstance() {
if (a == null) {
a = new AAA();
}
return a;
}
//这里若改成静态方法,会不会影响(因为我看单态对象中的方法都不是静态方法)
public void add(int i ) {
buf.append(i);

}
}

//可否改成
class BBB{
private static StringBuffer buf = new StringBuffer();
public static void add(int i) {
buf.append(i);
}
}


//3.在多线程环境下,垃圾回收线程会在什么时回收这个含有静态属性的对象.

banq
2006-01-16 12:57
>一个对象中的静态属性是否在多线程中共享
是的,只要在多线程环节中。



>//2.若是共享 ,可不可以把单态中的方法改成静态方法.
两者是一样,性质一样,改来改去不解决问题

//3.在多线程环境下,垃圾回收线程会在什么时回收这个含有静态属性的对象.
不会。

要好好研究一下多线程机制,本站有。

jinjian
2006-01-16 18:03
感谢版主的回答,我想自己是应该好好学习多线程知识

njava
2006-03-27 18:22
一个对象中的静态属性是否在多线程中共享
静态属性共享跟多线程有什么关系,不是静态变量照应可以共享。

fanrenII
2006-03-29 15:16
静态变量不是在堆中的,所有对象都共享方法区中的这个方法,这个是建立在堆栈上的,堆栈中是没有私有内存区的概念的,所以跟多线程没有什么关系。