在队列中查找已生成的任务的策略

时间:2012-05-02 11:37:36

标签: java multithreading task

我正在编写一个模块,其中将生成许多执行某项任务的线程。总的来说,我有一个'Manager'类,它为'Resolver'类提供信息,该类使用线程池创建和提交'Task'。

Resolver有一个线程池执行器,它具有无限队列,我用它来检查是否已经生成了特定任务。如果队列中已存在任务实例,则使用ThreadPoolExecutor将其删除并再次提交新任务。这是故意完成的,因为新任务会带来“经理”的新信息。

我正在使用ThreadPoolexecutor来查找任务是否已经是队列。但我担心队列的性能,并认为哈希映射是一个更好的选择,因为队列可能有超过30000个任务实例。

指导我选择适当的策略来查找队列中已生成的任务。

1 个答案:

答案 0 :(得分:0)

我认为这不会导致任何问题(除非你实现太复杂的equals实现)。我建议用profiler运行一个测试,看看它是不是真的有问题......

但是如果是,您可以创建自己的BlockingQueue实现(它可能作为contructor参数传递给ThreadPollExecutor)。通过这种方式,您可以创建某种类型的混合,一些实现BlockingQueue(用于标准工作队列)和HashSet(用于快速包含(...)测试)。请记住这些集合上的所有操作的正确同步。所有操作都必须是原子的。