基本上,我们倾向于在多线程环境中使用震荡图。我当前的代码如下:
ExecutorService executor = Executors.newFixedThreadPool(3);
Map<String, Future<String>> myMap = new HashMap<String, Future<String>>();
myMap.put("SomeValue", executor.submit(() -> return callAndReturnStringMethod("SomeValue"));
myMap.put("AnotheValue", executor.submit(() -> return callAndReturnStringMethod("AnotheValue"));
...
....
我只想将与传递的字符串对应的异步线程调用的未来对象存储为Map中的键。
我的第一个问题:在处理将来的对象时,使用hashmap而不是concurrenthashmap会好吗?在这个场景中我应该使用concurrenthashmap吗?第二个问题:如果我使用后者,会有什么取舍?
2条答案
按热度按时间gcmastyq1#
都不是。
使用
EnumMap
改变你的生活SomeValue/AnotherValue
至enum
s。它将更快地构建,更快地搜索和更紧凑的存储。如果您不打算更改ConcurrentHashMap
同时,它自己。xj3cbfub2#
你这么说
Map值未被修改。
所以没有理由选择concurrenthashmap。concurrenthashmap旨在提供线程安全性和跨线程操作的原子性,这两方面您都不需要。
权衡的结果是,当您不需要线程安全/原子操作时,您需要为它们付出代价。至于到底是多少,这取决于你的应用程序。
相关线程
性能concurrenthashmap与hashmap
concurrenthashmap有什么缺点吗?