2

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

public class TCPServer extends Thread {

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

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

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

4

1 回答 1

6

我的问题是,每个线程都有自己的静态变量 SERVERPORT 吗?

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

我错过了删除final:D 我拥有的变量是类型static boolean

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

您需要采取措施确保可见性。根据您的代码在做什么,这可能包括:

  1. 显式同步;
  2. 使用volatile boolean;
  3. 使用AtomicBoolean.
于 2013-03-14T11:52:39.757 回答