我正在用java开发一个软件,它在接收到事件(来自传感器)时创建一个线程。这些线程的生存时间非常短(传感器发送最多 10 个事件/分钟。
这个应用程序在大多数情况下都运行良好。但有时它会挂起。
当查看 eclipse 调试器时,我发现有很多线程,而且大多数都是"Thread[garbage collected]"
(约800个线程@_@)
我不知道这个错误是由我的代码中的动态创建线程还是其他错误引起的?
EDIT:
该问题确实是由于创建太多线程造成的。我已经用时间戳记录了所有传感器的事件,并且它创建了一些关于1200 events/minute
(该死!)。
我还编写了一个小型java程序,它创建尽可能多的线程。在~4100th thread
(好吧,木头电脑),jvm崩溃了。它不像我的应用程序那样挂起:-?。
因此,我认为动态创建线程时存在(可能)罕见的情况,并且会导致垃圾收集线程挂起?
不要为每个收到的事件创建一个新线程。相反,使用来自java.util.concurrent
包裹。
创建一个ExecutorService
(使用类中的静态方法之一Executors
)并将处理事件的作业提交给ExecutorService
. The ExecutorService
是一个为您管理线程的线程池。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)