gpt4 book ai didi

java - 丢失 ThreadPoolExecutor 中所有提交的任务

转载 作者:行者123 更新时间:2023-12-01 10:22:12 26 4
gpt4 key购买 nike

我有一个实例化的线程池

    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有可能吃掉我的任务吗?

最佳答案

不,这是不可能的。这肯定是由于您的代码中的某些内容造成的。

一个非常常见的情况是,您的任务由于某些异常而失败(因此很快),但您只是看不到堆栈跟踪。一件简单的事情是在任务中捕获 Throwable 并记录异常。您还可以使用 Callable 来代替,并通过返回的 Future 检查任务的状态。

关于java - 丢失 ThreadPoolExecutor 中所有提交的任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35516211/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com