jjzjj

synchronizedMap

全部标签

java - 当我们在 Collections.synchronizedMap() 中传递哈希表时会发生什么

今天我在面试中问了一个问题。问题是Collections.synchronizedMap()是用于同步map,默认情况下它不像hashmap那样是线程安全的。他的问题是我们可以在这个方法中传递任何类型的map。那么当我们在该方法中传递哈希表时会产生什么效果,因为哈希表默认情况下是同步的。 最佳答案 map的行为将是相同的,但性能会受到影响,因为每个方法将获取两个同步锁而不是一个。例如,考虑在生成的map上调用方法size()。Collections.SynchronizedMap类中的实现如下所示:publicintsize(){s

java - Collections.synchronizedMap(new LinkedHashMap());没有使 Map 线程安全

我正在使用以下构造来创建线程安全的Map。Collections.synchronizedMap(newLinkedHashMap());尽管我遇到了ConcurrentModificationException错误。 最佳答案 如果没有代码,很难猜测真正的问题是什么,但我的猜测是,您没有使用返回的集合来执行操作。根据javadocInordertoguaranteeserialaccess,itiscriticalthatallaccesstothebackingcollectionisaccomplishedthroughthe

Java 同步块(synchronized block)与 concurrentHashMap 与 Collections.synchronizedMap

假设如果有一个同步方法并且在该方法中,我会像这样更新一个hashmap:publicsynchronizedvoidmethod1(){myHashMap.clear();//populatethehashmap,takesabout5seconds.}现在当method1正在运行并且hashmap正在重新填充时,如果有其他线程试图获取hashmap的值,我假设它们会被阻止?现在不使用sync方法,如果我像下面这样将hashmap更改为ConcurrentHashMap,会有什么行为?publicvoidmethod1(){myConcurrentHashMap.clear();//p

java - 为什么菱形运算符不适用于 Java 7 中的 java.util.Collections 方法?

在Java1.7.0_55中,如果我写这个字段声明,我会得到一个编译错误(“不兼容的类型”):privatefinalMapmyMap=Collections.synchronizedMap(newHashMap());如果我将其更改为:privatefinalMapmyMap=Collections.synchronizedMap(newHashMap());它编译得很好。(我在这里以synchronizedMap为例,但对于其他Collections方法,unmodifiable*、synchronized*等也是如此)但为什么钻石运算符没有像我在这里预期的那样工作?由于Colle

java - 如何保持哈希表中元素的顺序

我有一个哈希表。values()方法以与插入顺序不同的顺序返回值。如何以与插入顺序相同的顺序获取值?使用LinkedHashmap是一种替代方法,但它不同步。 最佳答案 使用LinkedHashMap.HashtableandlinkedlistimplementationoftheMapinterface,withpredictableiterationorder.ThisimplementationdiffersfromHashMapinthatitmaintainsadoubly-linkedlistrunningthroug

java - 如何保持哈希表中元素的顺序

我有一个哈希表。values()方法以与插入顺序不同的顺序返回值。如何以与插入顺序相同的顺序获取值?使用LinkedHashmap是一种替代方法,但它不同步。 最佳答案 使用LinkedHashMap.HashtableandlinkedlistimplementationoftheMapinterface,withpredictableiterationorder.ThisimplementationdiffersfromHashMapinthatitmaintainsadoubly-linkedlistrunningthroug

java - Hashtable 和 Collections.synchronizedMap(HashMap) 的区别

据我所知,java.util.Hashtable同步java.util.Map中的每个方法接口(interface),而Collections.synchronizedMap(hash_map)返回一个包装器对象,其中包含将调用委托(delegate)给实际hash_map的同步方法(如果我错了,请纠正我)。我有两个问题:同步每个方法和拥有一个包装类有什么区别?有哪些场景可以选择其中一个?当我们执行Collections.synchronizedMap(hash_table)时会发生什么?这是否等同于简单地使用普通的java.util.Hashtable?

Java 同步块(synchronized block)与 Collections.synchronizedMap

以下代码是否设置为正确同步synchronizedMap上的调用?publicclassMyClass{privatestaticMap>synchronizedMap=Collections.synchronizedMap(newHashMap>());publicvoiddoWork(Stringkey){Listvalues=null;while((values=synchronizedMap.remove(key))!=null){//dosomethingwithvalues}}publicstaticvoidaddToMap(Stringkey,Stringvalue){s

Java 同步块(synchronized block)与 Collections.synchronizedMap

以下代码是否设置为正确同步synchronizedMap上的调用?publicclassMyClass{privatestaticMap>synchronizedMap=Collections.synchronizedMap(newHashMap>());publicvoiddoWork(Stringkey){Listvalues=null;while((values=synchronizedMap.remove(key))!=null){//dosomethingwithvalues}}publicstaticvoidaddToMap(Stringkey,Stringvalue){s