为什么set get 不能一直保存变量值呢

2020-07-06 10:07发布

问题:

是这样的:
我在A.java里启动了线程 t1.start

在t1线程里(因为功能分类只能在这里赋值) 用set() 方法,给 c.java的 变量 A 赋值。

然后在A.java里 使用 变量A。但发现A总是空值。

debug时发现A确实被赋值了。



这是为什么呢?

c.java里A的值不能一直保存吗?


谢谢



其实我的目的就是想 创建一个文件存放几个常用的全局变量。

回答1:

按照你的描述,假定一个java文件定义一个public类,那么A.java定义了A类,c.java定义了C类。你的意思就是在C中有一个变量A,然后你在A类中创建了一个子线程,并且通过子线程对C类的A变量进行了赋值。但是使用的时候变量A的值总是空,debug的时候正常对吧?
我猜测是时机的问题。假如你在主线程中使用了A类,而在A类创建了子线程,再在子线程对变量A赋值,然后你在主线程访问,很可能是你在访问变量A时,子线程的赋值操作还没有完成,但是你debug的时候,我猜测你是看主线程的变量情况,这样子线程是正常执行的(不受断点影响),所以你在debug的时候就看到变量A有值,而直接运行时变量A没有值。