Thread是否创建了多个静态变量实例

时间:2013-03-14 11:51:27

标签: java multithreading static

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

public class TCPServer extends Thread {

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

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

我对这个问题的解决办法是创建另一个类,比如说“GlobalVariables”并给这个类提供访问权限。

1 个答案:

答案 0 :(得分:6)

  

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

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

  

我错过了删除final:D我拥有的变量属于static boolean

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

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

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