我知道 Hashtable 是同步的,而 HashMap 不是。
据我所知,同步意味着一个线程一次访问一个对象。
所以在使用Hashtable的时候是没有问题的。但在我的项目中,我使用的是 HashMap。我在很多地方都用过。到目前为止,我对 HashMap 没有任何问题。
所以当同步概念出现时(即使用HashMap)。
我可以在所有使用 HashTable 的地方使用 HashMap 吗?
我可以在所有使用 HashMap 的地方使用 HashTable 吗?
所以在使用Hashtable的时候是没有问题的
不完全是——在某些情况下,哈希表确实需要外部同步(例如在迭代时)。
同步概念何时会出现(即使用 HashMap)?
如果您有一个包含 HashMap 的类:
public class SomeClass {
private Map map = new HashMap();
}
并且您map
从多个线程访问,您可能会得到意外的行为,应该使用足够的同步。
只要您只从单个线程访问您的地图,或者它是方法中的局部变量,就可以了。
我可以在所有使用 HashTable 的地方使用 HashMap 吗?
参看。上面:是的,如果地图没有被多个线程访问。
我可以在所有使用 HashMap 的地方使用 HashTable 吗?
始终是的,尽管在性能方面可能会降低效率。
除非多个线程同时访问同一个实例,否则没有问题。如果您正在使用多个线程,您还可以查看ConcurrentMap
.