JiveJdon Community Forums
在线154人   首页   主题总表   培训咨询   精华   查搜   注册    登陆
首页 » 论坛 » J2EE/JavaEE/JEE/EJB/JSF等技术讨论
???en_US.forumThreadPrev.name??? 上一主题
  Go back to the topic 返回本主题   Go back to the topic listing返回主题列表
???en_US.forumThreadNext.name??? 下一主题
1 2 Go 总共有 29 回复 / 2
 发表新帖子   回复该主题贴
zhwh19790

悄悄话
发表文章: 15
注册时间: 2007年04月17日 15:55
一个麻烦的实时性问题 2007年04月17日 16:06 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
标签列表 高性能(72)      多线程(37)     
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()
Coolyu0916

悄悄话
发表文章: 195
注册时间: 2007年04月23日 11:29
re:一个麻烦的实时性问题 2007年04月17日 16:40 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
不明白想做什么,能说得清楚一些么??
zhwh19790

悄悄话
发表文章: 15
注册时间: 2007年04月17日 15:55
re:一个麻烦的实时性问题 2007年04月17日 17:00 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
A生成多个线程,然后线程取A中的变量c,但是c又是在构造函数里面赋值的,怎么做?如果是C++的话,我可以delete这个A,但是java里面是自动回收的,我都搞不清楚是哪个实例调用方法。
zhwh19790

悄悄话
发表文章: 15
注册时间: 2007年04月17日 15:55
re:一个麻烦的实时性问题 2007年04月17日 17:02 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
A生成多个线程,c是在构造函数里面赋值,然后线程取A中的变量c。
Coolyu0916

悄悄话
发表文章: 195
注册时间: 2007年04月23日 11:29
re:一个麻烦的实时性问题 2007年04月17日 17:05 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
我真的不明白你说得

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

悄悄话
发表文章: 15
注册时间: 2007年04月17日 15:55
re:一个麻烦的实时性问题 2007年04月17日 17:08 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
是B要访问A中的数据C,c是通过A的构造函数赋的值。
zhwh19790

悄悄话
发表文章: 15
注册时间: 2007年04月17日 15:55
re:一个麻烦的实时性问题 2007年04月18日 08:43 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
是我讲得不清楚吗?怎么没回复?
zhwh19790

悄悄话
发表文章: 15
注册时间: 2007年04月17日 15:55
re:一个麻烦的实时性问题 2007年04月18日 09:09 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题


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中的方法如何写?
Coolyu0916

悄悄话
发表文章: 195
注册时间: 2007年04月23日 11:29
re:一个麻烦的实时性问题 2007年04月18日 09:11 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
可是多线程的是那个

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

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

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

悄悄话
发表文章: 195
注册时间: 2007年04月23日 11:29
re:一个麻烦的实时性问题 2007年04月18日 09:29 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题

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

悄悄话
发表文章: 195
注册时间: 2007年04月23日 11:29
re:一个麻烦的实时性问题 2007年04月18日 09:29 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
不知道是不是满足你的需求
[该贴被Coolyu0916于2007年04月18日 09:43修改过]
zhwh19790

悄悄话
发表文章: 15
注册时间: 2007年04月17日 15:55
re:一个麻烦的实时性问题 2007年04月18日 09:47 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
我把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,不知道该怎么写?
zhwh19790

悄悄话
发表文章: 15
注册时间: 2007年04月17日 15:55
re:一个麻烦的实时性问题 2007年04月18日 09:56 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
to Coolyu0916
:谢谢你耐心的回复,我的意思是 线程是A生成,但生成后就一直存在,而且是一次就生成所有线程,以后就不再生成线程了。而A是动态生成是经常变化的(A的实例会被清除),所以A的变量c也是变化的。以不变的线程取变化的A中的变化的c,这就是我烦恼的地方。
[该贴被zhwh19790于2007年04月18日 10:03修改过]
Coolyu0916

悄悄话
发表文章: 195
注册时间: 2007年04月23日 11:29
re:一个麻烦的实时性问题 2007年04月18日 10:00 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
D中引用了A,所以A不会被gc收集的。如果想A是唯一的可以使用Singleton模式。
zhwh19790

悄悄话
发表文章: 15
注册时间: 2007年04月17日 15:55
re:一个麻烦的实时性问题 2007年04月18日 10:07 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
A不是唯一的,因为A是B动态生成的。
这个主题有 29 回复 / 2Go 1 2
???en_US.forumThreadPrev.name??? 上一主题
  Go back to the topic 返回本主题   Go back to the topic listing返回主题列表    返回页首返回页首
???en_US.forumThreadNext.name??? 下一主题
热点TAG: AOP cache 缓存 DDD EJB 集群 设计模式 Hibernate IOC JiveJdon OO RBAC Seam Spring Struts
正在读取,请等待...
google yahoo 新浪ViVi 365Key网摘 天极网摘 CSDN网摘 添加到百度搜藏 POCO网摘 博采网摘
查询本论坛内 回复超过的热门帖子
     回复该主题贴
标题
 
粗体 斜体 下划线 插入图片 插入代码 插入url链接 插入附件
内容
 

手机阅读 add to google add to yahoo
解惑之道在J道 ,打造中国最具影响力的的企业软件社区
OpenSource JIVEJDON v3.0 Powered by JdonFramework Code © 2002-08 jdon.com
anti spam