动态线程创建可能存在问题或安全方法

时间:2013-02-11 07:23:39

标签: java multithreading thread-safety

我使用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 [Thread-17569]
      549791 [Thread-17570]
      549792 [Thread-17571]

  3.   
  4. Log4j控制台appender问题。
  5.      如果我错了,请纠正我。使用CountDownLatch的ExecutorService比那个更好吗?非常感谢

1 个答案:

答案 0 :(得分:1)

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