我代表特定作业向ExecutorService
提交Callable
(我们可以将作业视为在执行器服务上运行的事物的子集)。
当然,在提交Callable
时,我会得到一个Future
。
我需要能够中断代表特定作业提交的Future
。为了实现这一点,我很想使用嵌入到Job
类中的java.utils.TreeSet
。但是,我担心每个Future
的独特性:他们会在TreeSet
中占据独特的位置吗?如果没有,那么有没有更好的容器可以使用?
如果容器不符合要求,一种解决方案是扩展ExecutorService
并在每次提交时增加一个计数器,然后将该计数器用作某种保证唯一性的哈希值。但这是我渴望避免的开销,特别是如果我的担忧是没有根据的。
树集是一个排序集,你不需要对你的未来进行排序。
您也不需要处理重复项,因此不需要 Set。
简单地使用ArrayList
应该没问题。
由于 future 没有自己的实现equals
它将从 Object
回退到this==obj
。由于通常ExecutorService
会返回不同的对象,因此您应该没问题。
但是,我认为任何容器(列表,集合,数组,...)都应该这样做以确保我建议使用(Array)List
。
如果我需要查找未来,我会将其存储在地图中。以 id 为键,以未来为值。