我目前正致力于使用执行程序和完成服务创建一个小框架,以便同时执行多个任务。我有另一个独立运行的线程,它监视完成服务并每2秒轮询一次,以检查结果。当任务失败时,我想通过提交它来重新执行它。我想重试3次。我现在需要一个集合,可以让我存储任务ID,任务对象的引用和尝试的重试次数,这将是一个整数,同时将任务ID保持为唯一键。目前我正在使用2个哈希映射。一个用于存储ID和引用,另一个用于存储ID和重试计数。
编辑我的问题是我需要一个集合的建议,让我通过将任务ID保持为唯一键来检索任务引用和重试计数比2更有效地存储3件事哈希映射。
答案 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
对象就像移动货运列车并担心无法提升一些额外的纸质信封。