java - 线程是否创建静态变量的多个实例

标签 java multithreading static

我现在正在研究 TCP 套接字。 我从 Thread 派生我的服务器类。

public class TCPServer extends Thread {

  public static int SERVERPORT = 54321;
....
<code>
}

当我使用这个类时,它会打开几个线程。我的问题是,每个线程都有自己的静态变量 SERVERPORT 吗? 因为好像我编辑了这个变量,它对其他人没有影响。

我对这个问题的解决方案是创建另一个类,比如说“GlobalVariables”,并让这个类访问它。

最佳答案

My question is, does each thread have its own static variable SERVERPORT?

不,它没有。该变量由进程中的所有线程共享。

I missed removing the final :D The variable I have is of type static boolean

即使变量是共享的,当您在一个线程中修改它时,更改也不一定对其他线程可见,直到稍后的某个未指定的时间。

您需要采取措施确保可见性。根据您的代码执行的操作,这可能包括:

  1. 显式同步;
  2. 使用 volatile boolean 值
  3. 使用 AtomicBoolean

关于java - 线程是否创建静态变量的多个实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15408470/

相关文章:

java - static函数的情况下如何获取monitor?

C++:何时(以及如何)调用 C++ 全局静态构造函数?

java - 用 Java 表示图

c# - 为什么未捕获工作流异常?

multithreading - 多线程中的 OpenGL VBO

java - Netty 服务器挂起不接受任何连接

java - 如何从 MySql 获取整行数据并将其显示在 Java 应用程序上?

java - 如何创建每行具有不同按钮的jtable

java - JSON 中 map 的带点路径 (Java)

java - 接口(interface)的静态和最终规则