假设一个类的静态变量只占用一个内存位置,它是否被进程的所有线程共享?或者是否为每个正在运行的线程创建了这样一个变量的内存位置?
另外,如果所有线程共享同一个内存位置,我们如何确保互斥?
最佳答案
进程中类
的static
变量将在该进程中包含的每个线程之间共享。
您可以通过创建一个带有public static
字段的简单class
来验证这一点,然后启动几个Threads
并让它们增加变量,看看会发生什么。
如果您想确保互斥,您可以将变量设为私有(private),并且只允许通过使用 synchronized
关键字定义的方法访问它。
class Foo {
private static int aVariable = 0;
public static synchronized void increment() { aVariable++; }
public static synchronized int getVariable() { return aVariable; }
}
关于java - 静态变量是否只为所有正在运行的线程占用一个内存位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2148218/