Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.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集合以键值对的形式存储多种类型的数据_Java_Collections_Concurrency - Fatal编程技术网

Java集合以键值对的形式存储多种类型的数据

Java集合以键值对的形式存储多种类型的数据,java,collections,concurrency,Java,Collections,Concurrency,我目前正在使用executor和completion服务创建一个小框架,以同时执行多个任务。我有另一个独立运行的线程,它监视完成服务并每2秒轮询一次以检查结果。当一个任务失败时,我想通过提交它来重新执行它。我想重试最多3次。我现在需要一个集合,它可以让我存储任务ID、任务对象的引用和尝试的重试次数(将为整数),同时将任务ID保留为唯一键。目前我正在使用2个哈希映射。一个用于存储ID和引用,另一个用于存储ID和重试计数 编辑我的问题是,我需要一个集合的建议,该集合允许我通过将任务ID保留为唯一键来

我目前正在使用executor和completion服务创建一个小框架,以同时执行多个任务。我有另一个独立运行的线程,它监视完成服务并每2秒轮询一次以检查结果。当一个任务失败时,我想通过提交它来重新执行它。我想重试最多3次。我现在需要一个集合,它可以让我存储任务ID、任务对象的引用和尝试的重试次数(将为整数),同时将任务ID保留为唯一键。目前我正在使用2个哈希映射。一个用于存储ID和引用,另一个用于存储ID和重试计数


编辑我的问题是,我需要一个集合的建议,该集合允许我通过将任务ID保留为唯一键来存储这3件事,以比2个哈希映射更有效地检索任务引用和重试计数。

定义一个类来保存任务和执行尝试数:

public class ExecutionAttempt {
    private final Task task;
    private int numberOfFailedAttempts = 0;

    public ExecutionAttempt(Task task) { ... }

    public int getNumberOfFailedAttempts() { ... }

    public void countFailedAttempt() {
        numberOfFailedAttempts++;
    }

    ...
}
然后将当前试图执行的任务保存在普通的
HashMap

HashMap<TaskId, ExecutionAttempt> currentlyRunningTaks = ...
HashMap currentlyRunningTaks=。。。
您也可以使用
Pair
,但只要您想添加一些额外的信息,例如
Long averageTimeToFailure
或类似的内容,这可能很快就会失控


我绝对不会担心那些小小的
executiontrunt
对象:管理一个线程池并担心十几个额外的
executiontrunt
对象就像是移动一列货运火车,担心无法再提起几个纸质信封一样。

你的问题是什么?补充了这个问题。抱歉,前面没有明确说明。我建议将任务详细信息(如任务引用和重试计数)包装到类(如任务详细信息)中,并将任务id存储为键,将包装类的相应对象(任务详细信息)存储为值。但这不会随着任务数量的增加而增加需要创建的对象的数量吗?是,这将增加对象的数量。所以,会有一些像1这样的问题。您的应用程序在某个时间点将有什么样的任务?你的记忆力能承受那么多的记忆力吗?当任务成功执行时,将其从映射中删除。您还可以使用WeakHashMap(完全取决于您的实际用例)。