我在控制线程队列时遇到问题。我的应用程序使用 MySQL 数据库读取部分数据,对其进行处理并在屏幕上显示结果。队列中大约有 20 个任务,但一次只有一个正在处理。用户也可以取消当前队列,并从数据库中“询问”另一部分数据。现在我正在使用带有“丢弃最旧策略”的 ThreadPoolExecutor,因为我正在从队列中删除“最旧”部分数据,并在用户需要时将其替换为“新”部分。我的问题是,即使 corePoolSize 设置为 1,有时也会有 4 个线程同时运行。我不知道如何彻底清空未启动任务的队列。现在我正在使用 getQueue() 并从列表中删除所有项目,但我读到它是不好的方式。
结论:
1.有没有办法强制 ThreadPoolExecutor 一次只运行 1 个任务?
2.如何检查队列以防止任务重复(它们以String值区分)?
3. 如何从队列中删除干净的“旧”任务?
或者也许我应该使用其他机制?
任何帮助表示赞赏。