java 类的static变量值改不了,太奇怪了,高手帮忙解答一下原因。

public class A {
public static int count=-1;
}

public class B {
B(){
new Thread(){
@Override
public void run() {
A.count=100;
while(true){
System.out.println("B:"+String.valueOf(A.count));
sleep(500);
}
super.run();
}}.start();
}

public class C {
C(){
new Thread(){
@Override
public void run() {
A.count=200;
while(true){
System.out.println("C:"+String.valueOf(A.count));
sleep(500);
}
super.run();
}}.start();
}
抽象出的问题大致上面这样的,三个类在不同的包中,怎么B一直输出100,而C一直输出200,太不可思议了吧,望高手解答。
大致逻辑是这样的
前台设置A.count=-1为等待状态,发送广播给后台服务,让它启动录音,后台接收到广播后开始录音,并改变A.count=0为录音状态,前台在不断监测A.count的值,如果后台开始录音了,则更新用户界面,否则一直等待。问题是后台服务改变了A.count的值,而前台监测的值却一直没变化。

你是不是在两个不同的控制台运行着两个程序啊。按我的理解是这样就是两个程序,相互之间的变量应该是互斥的,不然就会产生死锁等,所以就是B的MAIN调用的A的COUNT为其所分配一块内存,C的Main一样,然后相当于各自有一个变量追问

想想应该是这样的,那有什么好的办法来处理进程间的通信呢,让它们共用一块内存的数据,帮忙解答

追答

好吧。刚才我又测试了一下。再建一个类,然后让他有main方法,再里面实例B和C,这样在刚开始时count是100,而且是B的,然后在线程c中将count设为了200,这样B和C都是200了。PS.按照你的要求,我个人觉得用JAVA实现不太现实,因为你的目的要涉及到底层的东西,在windows上java很难实现吧。如果是用java写一个完整的系统,可以用监听器等,具体的看官方文档,但应该只有一个main方法,即只有一个进程,不然内存数据无法共享

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-09-24
因为你抽象的太厉害了,本来的逻辑都不知道怎么回事了,按这么来说最终两个输出的结果会相同,要么100要么200追问

大致逻辑是这样的
前台设置A.count=-1为等待状态,发送广播给后台服务,让它启动录音,后台接收到广播后开始录音,并改变A.count=0为录音状态,前台在不断监测A.count的值,如果后台开始录音了,则更新用户界面,否则一直等待。问题是后台服务改变了A.count的值,而前台监测的值却一直没变化。

本回答被网友采纳
第2个回答  2013-09-24
....你在B里设A.count = 100...在C里设C.count = 200;......当然B输出100...C输出200啊......大哥....如果不是这结果...才是不可思议...本回答被提问者采纳
第3个回答  2013-09-24
当然啦,你那边弄了个死循环,而且B中调用了count,并且设置为100,而C中调用了count并设置成了200,你程序里面sleep(500)并且都用了thread线程,所以在B休眠500毫秒的时候C就调用了线程,然后C休眠500毫米,B就调用线程,就这样死循环下去。
第4个回答  2013-09-24
赋值了 自然就变了

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网