Java集合,用于在键值对中存储多种类型的数据

时间:2018-02-04 09:22:13

标签: java collections concurrency

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

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

1 个答案:

答案 0 :(得分:1)

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

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 = ...

你也可以使用Pair<Task, Integer>,但如果你想添加一些额外的信息,例如Long averageTimeToFailure或类似信息,这很快就会失控。

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