【发布时间】:2016-06-01 16:04:44
【问题描述】:
我有一个实例化的线程池
LinkedBlockingQueue<Runnable> taskQue = new LinkedBlockingQueue<Runnable>();
new ThreadPoolExecutor(100, 100, 0L, TimeUnit.MILLISECONDS, taskQue );
我向它提交了大量 (18k+) 的 Runnable 任务;每个任务都会处理数据并将数据发送到另一个 LinkedBlockingQueue,比如 dataQue,我有一个 while(True) 循环来轮询和处理来自 dataQue 的数据。
我每分钟都在记录 taskQue 的大小,它可以正常工作一段时间,因为我可以看到它的大小逐渐减小。然而,在程序开始大约 20 分钟后,大小从 17927 下降到 0!此时我的程序仍在运行,while 循环仍在处理来自 dataQue 的数据。
我想知道这怎么可能?我一直在谷歌搜索并阅读 javadocs。 LinkedBlockingQueue 和 ThreadPoolExecutor 似乎都不会自动取消/超时任务。 GC有可能吃掉我的任务吗?
【问题讨论】:
-
是的,它的类变量不应该超出范围。我检查了它的所有线程都在等待任务。
标签: java multithreading threadpool threadpoolexecutor