0

我正在使用 java 进行套接字编程,我正在使用两个动态线程集

首先接受客户端请求...为每个客户端动态创建线程

try (ServerSocket listener = new ServerSocket(1000)) {
   while (true) {
   Socket socket = listener.accept();
   logger.debug(socket.getRemoteSocketAddress().toString() + " Has joined :::");
   new ThreadPool(socket).start();
  }
}

第二个是接受他们正在发送的客户端数据包并创建新线程来解析客户端数据

public void run() { // this run() in ThreadPool class
    while (true) {
    new parserThread();//creating new thread for parsing information
   }
}

但我的问题是在 24 小时后我的应用程序卡住了,并且没有在控制台中打印任何内容。我不知道为什么它会卡住,但我对我的编码方法几乎没有疑问。告诉我这些是否有可能。

  1. 在另一个动态线程中创建线程。
  2. 线程名称分配问题,因为它的增加如下:

    549790 [线程 17569]
    549791 [线程 17570]
    549792 [线程 17571]

  3. Log4j 控制台附加程序问题。
如果我错了,请纠正我。带有 CountDownLatch 的 ExecutorService 比那个方法更好吗?非常感谢

4

1 回答 1

1

您可以使用jstack标准 JRE 安装中的实用程序来获取运行 Java 应用程序的堆栈跟踪。堆栈跟踪将告诉您应用程序卡住的确切位置。一旦您使用多个线程,您可能会在某处出现死锁。

于 2013-02-11T07:28:41.280 回答