3

我知道 Hashtable 是同步的,而 HashMap 不是。

据我所知,同步意味着一个线程一次访问一个对象。

所以在使用Hashtable的时候是没有问题的。但在我的项目中,我使用的是 HashMap。我在很多地方都用过。到目前为止,我对 HashMap 没有任何问题。

所以当同步概念出现时(即使用HashMap)。

我可以在所有使用 HashTable 的地方使用 HashMap 吗?

我可以在所有使用 HashMap 的地方使用 HashTable 吗?

4

2 回答 2

6

所以在使用Hashtable的时候是没有问题的

不完全是——在某些情况下,哈希表确实需要外部同步(例如在迭代时)。

同步概念何时会出现(即使用 HashMap)?

如果您有一个包含 HashMap 的类:

public class SomeClass {
    private Map map = new HashMap();
}

并且您map从多个线程访问,您可能会得到意外的行为,应该使用足够的同步。

只要您只从单个线程访问您的地图,或者它是方法中的局部变量,就可以了。

我可以在所有使用 HashTable 的地方使用 HashMap 吗?

参看。上面:是的,如果地图没有被多个线程访问。

我可以在所有使用 HashMap 的地方使用 HashTable 吗?

始终是的,尽管在性能方面可能会降低效率。

于 2013-05-14T16:48:35.500 回答
1

除非多个线程同时访问同一个实例,否则没有问题。如果您正在使用多个线程,您还可以查看ConcurrentMap.

于 2013-05-14T16:48:43.383 回答