【发布时间】:2018-09-08 06:15:50
【问题描述】:
我正在考虑一个问题的解决方案,我想同步一个List,它将被两种类型的线程访问:
- A:添加/删除列表的线程。
- B:线程将检查列表是否包含特定对象。
我想到的解决方案是:
SingletonManager 将被同步:
public class SingletonManager {
// Instance of singleton Synchronized
private static Map<String, String> myList = new ConcurrentHashMap<>();
private static synchronized void addElement(String key, String value) {
myList.put(key,value);
}
private static synchronized String getElement(String key) {
return myList.get(key);
}
}
问题在于,线程 A 无法尝试在列表中添加/删除,而线程 B 正在检查列表中是否包含元素。 (因为Manager的单例设计)
我的需要是线程 B 和 A 同时访问不同任务的列表。并且同步应该只保留在每个线程的方法委托上。
您可以建议我哪种解决方案?
我还想到了一种解决方案,可以通过每种类型的线程创建 两个 Manager 实例。你怎么看?
非常感谢:)
【问题讨论】:
标签: java multithreading list thread-safety singleton