一个麻烦的实时性问题

A生成多个线程,之后线程取A中的某个变量c,但是c又是在构造函数里面赋值的(实时性),我的做法是使用static方法取c(因为new A实在不方便),所以我把c定义成了static变量,请问这么写好不好?有什么问题?有没有别的好办法?

举例:


class A{
private static String c;

public A(String c1){
this.c =c1;
}

public static String getparam(){
return c;
}
}

...........线程里面getparam()

不明白想做什么,能说得清楚一些么??

A生成多个线程,然后线程取A中的变量c,但是c又是在构造函数里面赋值的,怎么做?如果是C++的话,我可以delete这个A,但是java里面是自动回收的,我都搞不清楚是哪个实例调用方法。

A生成多个线程,c是在构造函数里面赋值,然后线程取A中的变量c。

我真的不明白你说得

比如class A,会生成多个现成B,现在B要访问A中的数据C是这个意思么??,而C是A构造方法赋值的??

是B要访问A中的数据C,c是通过A的构造函数赋的值。

是我讲得不清楚吗?怎么没回复?



class B{

A a = new A(c1);
}

class A{
private String c;

public A(String c1){
this.c = c1;}

public void createThread(){
new D().start();}

public void notifyThread(){
notifyAll();//唤醒线程
}


}

class D extends Thread{

public void run(){

while(true){
wait();
if(...)
//判断条件里含方法,取A中的变量c;如果满足则继续

{ }else{continue;}
//否则返回while去wait();


}
}
}

我的意思就是线程D中的方法如何写?

可是多线程的是那个

进程解决的是资源的分配
现成解决的是功能

线程访问进程数据是没有任何问题的
直接访问就可以了

C是A构造的时候赋值的也就是必定存在一个A.c 构造函数之后你才可以spawn一个线程出来,从时序而言会有什么问题那??多线程访问最好进行原子访问,否则必须加锁。你可以画一下时序图,看一看B出现的时候A是否已经存在。


class B{
A a = new A(c1);
}

class A{
private String c;
public A(String c1){
this.c = c1;
}

public void createThread(){
new D(this).start();
}

public void notifyThread(){
notifyAll();//唤醒线程
}

public synchronized void setC(string value){
c = value;
}

public synchronized string getC()
{
return c;
}
}

class D extends Thread{
private A _a;
public D(A a){
_a = a;
}

public void run(){
while(true){
wait();
if(...)
//判断条件里含方法,取A中的变量c;如果满足则继续
{ }
else{continue;}
//否则返回while去wait();
}
//访问A的数据
_a.setC(string c);
}
}


[该贴被Coolyu0916于2007年04月18日 09:43修改过]

不知道是不是满足你的需求
[该贴被Coolyu0916于2007年04月18日 09:43修改过]

我把B里面写得更清楚点吧,B是实时生成的,但是根据条件执行A里的方法。


class B{
A a = new A(c1);

if(...){
a.createThread();
}else if(...){
a.notifyThread();}

}

class A{
private String c;

public A(String c1){
this.c = c1;}

public void createThread(){
new D().start();}

public void notifyThread(){
notifyAll();//唤醒线程 }
}

class D extends Thread{

public void run(){
while(true){
wait();
if(...)
//判断条件里含方法,取A中的变量c,满足则继续
{ }else{continue;}
//否则返回while去wait();

} }}

线程D中if条件里有个方法要取A中的变量c,不知道该怎么写?

to Coolyu0916
:谢谢你耐心的回复,我的意思是 线程是A生成,但生成后就一直存在,而且是一次就生成所有线程,以后就不再生成线程了。而A是动态生成是经常变化的(A的实例会被清除),所以A的变量c也是变化的。以不变的线程取变化的A中的变化的c,这就是我烦恼的地方。
[该贴被zhwh19790于2007年04月18日 10:03修改过]

D中引用了A,所以A不会被gc收集的。如果想A是唯一的可以使用Singleton模式。

A不是唯一的,因为A是B动态生成的。