【发布时间】:2015-12-02 13:27:06
【问题描述】:
我有一个全局变量和多个线程,它们每隔几秒就会持续读取该变量。
现在我在一个线程中有一个写入变量的方法,当我在写入它的函数中打印出全局变量时,我看到写入已经发生并且变量值根据需要更改.
但是当我在函数执行后立即从函数作用域外读取时,全局变量实际上并没有改变,写入也没有成功。
这听起来是不是因为同时读/写?我在想发生了一些我不明白的事情,尽管直觉上我看不出多线程会如何改变任何事情,因为全局变量 is 至少会暂时发生变化。
除了提到的之外,没有发生任何写入。
我没有过多地阅读多线程,所以我只想要一个高级的“是的,这是可能的,并且对多线程和全局变量有意义”,我会在必要时阅读。
【问题讨论】:
-
没有看到任何代码,任何猜测都是可能的。另外:Java 中没有全局变量。也许这就是它没有按预期执行的部分原因。您能解释一下“全局变量”的确切含义吗?
-
类的成员变量可用于所有嵌套类
-
如果它是一个静态成员,通过另一个实例的另一个调用会改变值
-
答案是:是的,这对于多线程和共享变量来说是可能的并且是有意义的。多线程可能很难正确处理,所以我不会在不了解至少the basics 的情况下开始在这里和那里创建线程......例如参见:Memory consistency errors。
-
@Stultuske,取决于你所说的“全球”是什么意思。 “全局变量”的一个含义是在任何地方都在范围内的变量。公共类
Foo的公共类变量bar在任何地方都在范围内...您可以从任何地方访问它的值,即使在类Foo之外,您也必须使用它的全名Foo.bar,而在Foo类本身中,您可以只说bar。
标签: java multithreading concurrency