我现在正在研究 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 typestatic boolean
即使变量是共享的,当您在一个线程中修改它时,更改也不一定对其他线程可见,直到稍后的某个未指定的时间。
您需要采取措施确保可见性。根据您的代码执行的操作,这可能包括:
- 显式同步;
- 使用
volatile boolean 值
; - 使用
AtomicBoolean
。
关于java - 线程是否创建静态变量的多个实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15408470/