可能重复: HashMap和Hashtable之间的区别?
前几天我去面试,面试官问我在什么情况下使用hashmap而不是hashtable会有问题?意思是给出一个例子,其中hashtmap的使用将导致问题,但使用哈希表将解决问题。
他告诉我,运行代码的机器是单核的!!
我给了一个例子
Time Thread1 Thread 2
t0 tb.put("a",1)
t1 tb.put("a",2) int a = tb.get("a"); 我告诉过,如果在t1中,如果t1和t2同时执行,那么就会导致问题。他说,由于它是一个单独的核心cpu,它永远不会并行执行2条语句。
谁能澄清一下,什么时候会有问题?有情况的例子吗?
编辑:我通过插入hashmap和hashtable发布了这个问题,我知道hashtable方法是同步的,而hashmap的方法不是同步的,我已经告诉他了
为了体验一下,我实现了following.And,代码从未崩溃过?我使用hashtable,但它仍然是A :)中的hashmap。)
public class MyT extends Thread {
HashMap<String,String > a = A.t;
@Override
public void run() {
while (true) {
a.put("a", "one");
System.out.println(Thread.currentThread().getName());
}
}
public static void main(String[] args) {
MyT t1 = new MyT();
t1.start();
MyT t2 = new MyT();
t2.start();
}
}发布于 2011-12-07 05:28:41
我认为你必须先做以下几件事,然后再问:
以上两种方法得到的结果如下:
StackOverflow: HashMap和Hashtable的区别?
HashMap和Hashtable有什么区别?
HashMap与HashTable的差异?我们能让hashmap同步吗?
希望有帮助:)
发布于 2011-12-07 05:25:36
嗯,仅仅因为它是单一的核心,并不意味着你不能有比赛的条件。有可能(可能吗?)这意味着您不会遇到内存可见性问题,但是您肯定可以在单个内核上运行多个线程,而且它们仍然可以被调度,这样您就可以获得争用条件。
发布于 2011-12-07 05:28:03
这里有一个很好的链接,您可以参考它:HashMap和Hashtable之间的区别?
我想知道他们是否像你所说的那样问你,因为他似乎想问,哪一个是线程安全的,哪个不是。
Hashtable是线程安全的,但是他为什么要问Hashtable的问题呢?
https://stackoverflow.com/questions/8410766
复制相似问题