【发布时间】:2021-06-23 06:51:58
【问题描述】:
假设在以下示例中,deleteItems(消费者)和addItem(生产者)用于多个线程删除和添加项目到map。
class Test {
public static SparseIntArray map = new SparseIntArray();
// deleteItems is invoked every 10 seconds
public static void deleteItems() {
synchronized(Test.class) {
// Iterate over the items in the map and delete some
}
}
// addItem is invoked frequently
public static void addItem(int key, int value) {
// Add an item into the map
}
}
我希望实现以下两个目标:
(1) 当deleteItems被调用时,任何将要使用addItem的线程都会被阻塞。
(2) 当deleteItems 未被调用时,任何线程都可以使用addItem 将新项目放入map。 (因为效率问题我不想同步addItem)
有没有可能实现我想要的?
【问题讨论】:
-
SparseIntArray是Map实现的子类吗?我是否也假设无法使用ConcurrenthashMap的实例。 -
@WJS 不,它不是 Map 的子类。
-
ConcurrenthashMap 呢?您可能想要编辑您的问题并解释您正在尝试做什么,而不是如何修复预期的解决方案。您的最终任务可能有其他方法。
标签: java android concurrency synchronization