假设类的静态变量仅占用一个内存位置,那么进程的所有线程都共享它吗?还是为每个正在运行的线程创建了一个这样的变量的内存位置?

另外,如果所有线程共享相同的内存位置,我们如何确保互斥?

最佳答案

进程中staticclass变量将在该进程中包含的每个线程之间共享。

您可以通过使用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; }

}

07-24 09:49
查看更多