按照你的描述,假定一个java文件定义一个public类,那么A.java定义了A类,c.java定义了C类。你的意思就是在C中有一个变量A,然后你在A类中创建了一个子线程,并且通过子线程对C类的A变量进行了赋值。但是使用的时候变量A的值总是空,debug的时候正常对吧?
我猜测是时机的问题。假如你在主线程中使用了A类,而在A类创建了子线程,再在子线程对变量A赋值,然后你在主线程访问,很可能是你在访问变量A时,子线程的赋值操作还没有完成,但是你debug的时候,我猜测你是看主线程的变量情况,这样子线程是正常执行的(不受断点影响),所以你在debug的时候就看到变量A有值,而直接运行时变量A没有值。
是有两个按钮的,正常运行时
第一个 启动线程 set方法赋值。控制台输出时,是有值 的。
第二个 get方法访问变量,但是空值
其实我就是想 创建一个文件存放几个常用的全局变量。
@还没有: 你可以把代码贴出来
@我是满意吖: https://q.cnblogs.com/q/128146/
@还没有: 看到了,你在threaddemo中创建了一个新的values对象了,在main方法中主线程和子线程访问的都不是同一个values,当然有问题了
@我是满意吖: 怎么让main和thread里,访问的是同一个values里的a 呢?
@还没有: 可以通过threaddemo的构造方法传进去,做法有很多种,这个只是其中一种做法
@我是满意吖: setA(a)写到threaddemo的构造方法里?
一样的结果啊
@还没有: threaddemo类这么写:
public class threademo extends Thread{
private values vv;
public threaddemo(values vv) {
this.vv = vv;
}
public void run() {
vv.setA(10);
System.out.println("thread:" + vv.getA());
}
}
main.java中创建线程的时候这么写:
System.out.println("=2==");
threademo td = new threademo(vv); // 这里的vv变量就是上面创建的
td.start();
td.join();
这样就是主线程和子线程访问同一个对象了。
另外说一下,你的代码的命名规范需要注意一下。
@我是满意吖: 嗯。昨天回复后,才想到了。谢谢