假设类的静态变量仅占用一个内存位置,那么进程的所有线程都共享它吗?还是为每个正在运行的线程创建了一个这样的变量的内存位置?
另外,如果所有线程共享相同的内存位置,我们如何确保互斥?
最佳答案
进程中static
的class
变量将在该进程中包含的每个线程之间共享。
您可以通过使用class
字段创建一个简单的public static
来验证这一点,然后启动几个Threads
并让它们递增变量并查看会发生什么。
如果要确保互斥,则可以将变量设为私有,并且仅允许通过使用synchronized
关键字定义的方法对其进行访问。
class Foo {
private static int aVariable = 0;
public static synchronized void increment() { aVariable++; }
public static synchronized int getVariable() { return aVariable; }
}