java - 套接字代码创建新的作家?

标签 java sockets while-loop

我有一个带有 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/

相关文章:

java - 通过 Amazon API Gateway 将 POST 请求正文传递到 Lambda

java - JFormattedTextField 具有初始值,可以逐个符号覆盖

java - SLF4J : Failed to load class "org.slf4j.impl.StaticLoggerBinder". Java应用程序错误

java.net.SocketException : Socket is closed while socket is still open

python - while循环运行一次?

c - 在 C 中打印字符指针数组时出现奇怪的输出

c - "Parse error before "] "token"分配给变量[]时

java - 继承后保护成员行为。

java - 为我的代理类中的每个方法执行 InvocableHandler 调用方法

c# - 哪个本地 ip 连接到远程 ip?