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

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
静态变量不是在堆中的,所有对象都共享方法区中的这个方法,这个是建立在堆栈上的,堆栈中是没有私有内存区的概念的,所以跟多线程没有什么关系。

猜你喜欢