我在控制线程队列方面遇到了问题。我的应用程序使用MySQL数据库读取部分数据,对其进行处理并将结果显示在屏幕上。队列中大约有20个任务,但一次只处理一个任务。此外,用户可能会取消当前队列,并从数据库“请求”另一部分数据。现在我正在使用具有“丢弃最旧策略”的ThreadPoolExecutor,因为我正在删除队列中的“最旧”数据,以及在用户需要它时将其替换为“新”的数据。我的问题是,即使将corePoolSize设置为1,有时也会有4个线程同时运行。我不知道如何清除未启动任务的队列。现在我正在使用getQueue()并从列表中删除所有项目,但我读到这是错误的方法。在向队列中添加新任务之前,我想检查队列中是否没有相同数据片段的任务,但我不知道如何做到这一点。
总结:
1.是否有办法强制ThreadPoolExecutor一次仅运行1个任务?
2.如何检查队列以防止重复任务(它们由String值区分)?
3.如何干净地从队列中删除'旧'任务?
或者我应该使用其他机制吗?
任何帮助都将不胜感激。