gpt4 book ai didi

java - ThreadPoolExecutor 避免同一 ID 的并发处理

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

我为我的客户获取任务。每个顾客都有一个 ID。我希望来自一个客户(即相同 ID)的所有任务都按顺序处理,而不是同时处理。但是,同时处理两个不同的客户是完全可以的。

处理是由具有多个线程的 ThreadPoolExecutor 完成的。我应该如何修改Queue或ThreadPoolExecutor,以便每当提交一个任务时,首先检查是否有相同ID的另一个任务已经在运行,在这种情况下,它被置于某种等待状态。

注意:jkeylockmanager ( https://code.google.com/p/jkeylockmanager/ ) 的方向是正确的,但它只管理每个 ID 的锁,而不管理线程选择。

最佳答案

考虑保留已发出请求的客户 ID 的线程安全队列。然后,仅将客户 ID 提交到线程池。例如:

DoAllCustomerTasks customer1 = new DoAllCustomerTasks(1);
DoAllCustomerTasks customer2 = new DoAllCustomerTasks(2);

threadPool.submit(customer1);
threadPool.submit(customer2);

然后,DoAllCustomerTasks 将实现 Runnable,它将负责查找并执行与其构造的 customerID 关联的所有任务。

关于java - ThreadPoolExecutor 避免同一 ID 的并发处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34097722/

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