我有一个程序同时存在奇怪的错误。
该程序的作用:
EVENT_LOOP_PAUSE_DURATION_IN_MS
执行事件循环。TaskProcessor
500 ms
都会打印我的执行器的队列大小。 我希望每个taskId
队列中最多有一个任务。因此,当我在队列中添加任务时,我会检查任务是否已经存在。如果没有任务,我添加它。在任务处理结束时,我从activeTasks
映射中删除了任务。
如果运行该程序,则会看到以下输出:
ERROR: 50
ERROR: 70
ERROR: 80
ERROR: 90
ERROR: 110
ERROR: 120
ERROR: 120
ERROR: 140
因此,有一个错误。我不知道为什么,但是线程池队列的大小正在无限增加。
您可以看到,我在程序的2点处删除了活动任务:
finally
的{{1}}块中。因此,如果我删除了代码(该代码删除了第(2)点中的任务),则该错误消失了。我不了解这种行为。
TaskProcessor
答案 0 :(得分:0)
问题出在点(2),您正在从activeTasks映射中删除过时的任务。但是它们仍然提交给ExecutorService。由于您已从地图中将其删除,因此while循环执行另一个循环时,相同的任务将重新提交给ExecutorService。这导致任务数量增加。