java - 静态变量是否只为所有正在运行的线程占用一个内存位置?

标签 java multithreading static variables

假设一个类的静态变量只占用一个内存位置,它是否被进程的所有线程共享?或者是否为每个正在运行的线程创建了这样一个变量的内存位置?

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

最佳答案

进程中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/

相关文章:

java - 如何更改 JFileChooser 对话框的标题

multithreading - 在Delphi 中实现C# 的BackgroundWorker 的最佳方法是什么?

c++ - 架构 x86 的 undefined symbol

c++ - 在 eclipse 中将 .so lib 添加到 .pro 文件中。 C++/ eclipse /Linux

java - postman 给出了正确的响应,但放心返回了错误的响应

java - react native : Is it possible to persist native Java variable values on app reload?

WPF 调度程序 - 突然出现 "stuck"并且在按下某个键之前不处理操作

android - android runOnUiThread和java中简单代码的区别

c++ - 为什么 "static"关键字在 C 和 C++ 中有这么多含义?

java - 不同选项卡的不同操作栏项目,Actionbarsherlock