我正在研究TCP套接字。 我从Thread派生我的服务器类。
public class TCPServer extends Thread {
public static int SERVERPORT = 54321;
....
<code>
}
当我使用这个类时,它会打开几个线程。我的问题是,每个线程都有自己的静态变量SERVERPORT吗? 因为看起来我编辑这个变量似乎没有其他效果。
我对这个问题的解决办法是创建另一个类,比如说“GlobalVariables”并给这个类提供访问权限。
答案 0 :(得分:6)
我的问题是,每个线程都有自己的静态变量SERVERPORT吗?
不,它没有。该变量由进程中的所有线程共享。
我错过了删除
final
:D我拥有的变量属于static boolean
即使该变量是共享的,当您在一个线程中修改它时,在某个稍后的,未指定的时间之前,该更改不一定会对其他线程可见。
您需要采取措施确保可见性。根据您的代码执行的操作,这可以包括:
volatile boolean
; AtomicBoolean
。