2013-05-14 157 views
1

我知道哈希表是同步的,而哈希映射不是。当我需要使用哈希映射,因为它不同步

根据我的知识同步意味着每次通过一个线程访问一个对象。

所以使用Hashtable没有问题。但在我的项目中,我使用HashMap。我在很多地方都用它 。直到现在我没有得到任何问题与HashMap。

所以当同步的概念会进入图片(即使用HashMap)。

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

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

+0

某人被投票结束。请给我原因 – PSR 2013-05-14 16:47:53

+2

您问了一个问题,具体关于您在程序中使用它的方式,并没有显示该程序的示例。我们应该如何知道你在你的程序中做了什么是安全的?我们甚至不知道您的程序是否实际上是多线程的。 – Affe 2013-05-14 16:54:00

+0

你好,先生,我问一般不是专门 – PSR 2013-05-14 16:55:16

回答

5

所以有在使用Hashtable的

不完全是没有问题的 - 在某些情况下,哈希表确实需要外部同步(例如在迭代)。

什么时候将同步概念引入图片(即使用HashMap)?

如果持有一个HashMap类:

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

,并从多个线程访问map,你可能会得到意外的行为,应使用适当的同步。

只要你只从一个线程访问你的地图,或者它是一个方法内的局部变量,你就没问题。

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

cf.上图:是的,如果地图不被多个线程访问。

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

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

+0

在我的项目中,我在很多地方使用HashMap。直到现在我没有遇到任何问题 – PSR 2013-05-14 16:50:45

+0

@PSR事实上,你没有遇到任何问题并不意味着你将来不会得到任何问题。 – assylias 2013-05-14 16:51:28

+0

这里多个线程表示访问多个用户相同的方法?我很困惑这 – PSR 2013-05-14 16:52:59

0

除非多个线程同时访问完全相同的实例,否则没有问题。如果你正在使用多线程,你也可以看看ConcurrentMap