我有一个带有 while 循环的代码示例,其中包含 true 。我认为这会永远运行,直到程序或类停止为止。但是,我很困惑,因为每次运行 while 循环时都会创建一个新的 PrintWriter。我认为这将是一个问题。还创建了一个新线程。我是否错误地阅读了这段代码。
public static void main (String[] args) {
new VerySimpleChatServer().go();
}
public void go() {
clientOutputStreams = new ArrayList();
try {
ServerSocket serverSock = new ServerSocket(5000);
while(true) {
Socket clientSocket = serverSock.accept();
PrintWriter writer = new PrintWriter(clientSocket.getOutputStream());
clientOutputStreams.add(writer);
Thread t = new Thread(new ClientHandler(clientSocket));
t.start();
System.out.println(“got a connection”);
}
} catch(Exception ex) {
ex.printStackTrace();
}
} // close go
看起来好像,它只在建立新连接时运行,但是代码的哪一部分证明了这一点。看起来好像不断创建新的编写器和新线程。
谁能解释一下吗?
最佳答案
仅当套接字可用时才会创建写入器,因为 serverSock.accept()
处于阻塞状态(当套接字在其队列中可用时返回)。
注意:此代码已损坏,很容易抛出 OutOfMemoryError
因为它不限制创建的线程数,请考虑使用 managed thread pool相反。
关于java - 套接字代码创建新的作家?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32597079/