友
我正在构建一个JAVA TCP侦听器,它可以一次处理6000个传入请求。我正在创建一个套接字连接并接受数据,在接受数据之后,我正在通过创建一个线程对它进行一些操作,但我不会杀死这个线程,因为设备将每两分钟发送一次数据,所以我只是在制作线程睡眠模式30秒。
但是在运行系统五分钟后,我的应用程序在tomcat6.0下运行时发出错误 - “Web应用程序似乎已经启动了一个名为[Thread-214]的线程,但未能阻止它。这很可能创建内存泄漏。“
请帮我理解我做错了什么?
提前致谢。
答案 0 :(得分:2)
如果您有许多套接字,而不是每个通道使用线程。 尝试使用遍历所有套接字的一个线程。 看看Java Selector http://www.exampledepot.com/egs/java.nio/NbClient.html
答案 1 :(得分:1)
您应该知道您的操作系统无法处理那么多线程。此外,为每个线程分配内存,因此您将很快填满堆。
由于我不知道你想要实现什么,我只是猜测你的应用程序中存在设计缺陷,通常会重用线程来处理请求。
答案 2 :(得分:0)
我认为Selector可能有所帮助。您可能希望在此链接中阅读有关选择器的简短介绍http://tutorials.jenkov.com/java-nio/selectors.html “Selector是一个Java NIO组件,它可以检查一个或多个NIO通道,并确定哪些通道可以用于例如读取或写入。这样一个线程就可以管理多个通道,从而管理多个网络连接。”
答案 3 :(得分:0)
答案 4 :(得分:-2)