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



我目前正在使用执行器和完成服务创建一个小框架,以同时执行多个任务。我有另一个独立运行的线程,它监视完成服务并每 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 = ...

您也可以侥幸逃脱 Pair<Task, Integer> ,但一旦您想添加一些其他信息(例如Long averageTimeToFailure或类似的东西(,这可能会很快失控。

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

最新更新