Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于存储java.util.concurrent.Future实例的容器_Java - Fatal编程技术网

用于存储java.util.concurrent.Future实例的容器

用于存储java.util.concurrent.Future实例的容器,java,Java,我代表一个特定的作业将Callables提交给ExecutorService(我们可以将作业视为在executor服务上运行的事物的子集) 当然,在提交可调用的时,我会得到一个未来 我需要能够中断代表特定作业提交的未来s。为了实现这一点,我尝试使用嵌入到我的Job类中的java.utils.TreeSet。但是,我担心的是每个未来的差异性:它们会在树集中占据独特的位置吗?如果没有,那么是否有更好的容器可供使用 一种解决方案是,如果一个容器不能胜任,那么它将扩展ExecutorService,并在

我代表一个特定的作业将
Callable
s提交给
ExecutorService
(我们可以将作业视为在executor服务上运行的事物的子集)

当然,在提交
可调用的
时,我会得到一个
未来

我需要能够中断代表特定作业提交的未来s。为了实现这一点,我尝试使用嵌入到我的
Job
类中的
java.utils.TreeSet
。但是,我担心的是每个
未来的差异性:它们会在
树集中占据独特的位置吗?如果没有,那么是否有更好的容器可供使用


一种解决方案是,如果一个容器不能胜任,那么它将扩展
ExecutorService
,并在每次提交时增加一个计数器,然后将该计数器用作某种散列,以保证唯一性。但这是我渴望避免的开销,特别是如果我的担忧是毫无根据的。

由于future没有自己的
equals
实现,它将依赖
对象的
this==obj
。由于正常情况下,
ExecutorService
将返回不同的对象,因此您应该不会有问题


但是,我认为任何容器(列表、集合、数组等)都应该这样做,以确保我建议使用
(数组)列表

如果我需要查找未来,我会将其存储在地图中。以id为键,以未来为值

树集是一个排序集,您不需要对未来进行排序

您也不需要处理重复项,因此不需要设置


简单地使用一个
ArrayList
就可以了。

澄清一下:“Job”和“Callable”之间是否存在1:n的关系:也就是说,每个Job都由几个Callable组成,当一个Job应该被取消时,它的所有Callable的未来都应该被取消?@Marco13:是的,这是正确的。好的,现在接受了
ArrayList
,否则我建议使用
Map
(或者类似地,番石榴
Multimap
)来轻松管理工作和未来之间的关系;第二双眼睛的价值怎么估计也不为过。