我有一个主线程,它创建一个 HashMap,向其中添加多个可运行对象,然后启动每个可运行对象(将 HashMap 传递给每个对象)。可运行对象在即将完成处理之前从映射中删除其对象。
我想知道在这种情况下是否有任何理由使用 ConcurrentHashMap (而不是 HashMap) - 可运行对象在地图上执行的唯一操作就是将自己从中删除。在这种情况下是否需要考虑并发性而需要使用 ConcurrentHashMap?
主线程
private final Map<Integer, Consumer> runnableMap = new HashMap<>();
Runnable runnable;
for (int i = 1; i <= NUM_RUNNABLES; i++) {
runnable = new Consumer(i, runnableMap);
runnableMap.put(i, runnable);
executionContext.execute(runnable);
}
消费者实现Runnable
private final Integer consumerNumber;
private final Map<Integer, Consumer> runnableMap;
public Consumer(int consumerNumber, final Map<Integer, Consumer> runnableMap){
this.consumerNumber = consumerNumber;
this.runnableMap = runnableMap;
}
public void run() {
:::
// business logic
:::
// Below remove is the only operation this thread executes on the map
runnableMap.remove(consumerNumber);
}
拉丁的传说
慕田峪7331174
眼眸繁星
相关分类