gpt4 book ai didi

java - Android 中完全控制的线程队列

转载 作者:太空狗 更新时间:2023-10-29 12:49:17 26 4
gpt4 key购买 nike

我在控制线程队列方面遇到了问题。我的应用程序使用 MySQL 数据库读取部分数据,对其进行处理并在屏幕上显示结果。队列中大约有 20 个任务,但同时只有一个正在处理。用户也可以取消当前队列,并从数据库中“请求”另一部分数据。现在我正在使用具有“丢弃最旧策略”的 ThreadPoolExecutor,因为我正在从队列中删除数据的“最旧”部分,并在用户需要时将其替换为"new"部分。我的问题是,即使将 corePoolSize 设置为 1,有时也会同时运行 4 个线程。我不知道如何清空未启动任务的队列。现在我正在使用 getQueue() 并从列表中删除所有项目,但我读到这是不好的方法。同样在将新任务添加到队列之前,我想检查队列中是否没有这样的任务(具有相同的数据部分),我不知道如何实现。

结论:
1. 有没有办法强制ThreadPoolExecutor一次只运行一个任务?
2、如何检查队列防止任务重复(以String值区分)?
3. 如何从队列中彻底删除“旧”任务?

或者我应该使用其他机制?

感谢任何帮助。

最佳答案

1. Is there any way to force ThreadPoolExecutor to run just 1 task at once?

Executors.newSingleThreadExecutor()

2. How to check queue to prevent duplicates of tasks (they are distinguished by String 

创建您自己的任务名称列表。在将任务发送给执行者之前将任务名称添加到此列表,并在任务执行后删除任务名称。

3. How to remove cleanly 'old' tasks from queue?

当您将任务添加到执行程序时,您将获得 Future 对象。您可以使用 future 来取消任务。或者你可以关闭执行器并创建一个新的)

关于java - Android 中完全控制的线程队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14201669/

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