我想知道是否存在其他非同步数据结构的线程安全方法,而不是使用像Hashtable和Vector这样的同步数据结构,或者使用像Collections.synchronizedList(List arg)或Collections.synchronizedMap(Map arg)这样的包装器? 在采访中我被问到如何使哈希表线程安全,我告诉他使用Hashtable或ConcurrentHashMap或使用Collections.synchronizedMap封装器,但似乎这些答案并不是他要找的。
是的,你可以使其不可变。在许多情况下,这实际上是使代码线程安全的绝佳方式。
Map
状态的方法,并确保每次对 Map
的更改都会创建一个新的 Map
。虽然这种方法并非适用于所有情况,但能够应用时它可以为你节省大量麻烦。 - Keppiljava.util.Collections
有一些方法可以将各种集合类转换为不可变集合。请查看unmodifiable*()
方法。 - Ted Hoppsynchronized
包装器是无法帮助您的。 - Louis WassermanConcurrentHashMap
,那么是的。但一般来说,如果你想锁定整个操作组,你可能需要自己进行同步。 - Louis Wasserman