【发布时间】:2012-01-14 16:41:54
【问题描述】:
前几天去面试面试官问我在什么情况下使用hashmap而不是hashtable会有问题? 意思是给出一个例子,使用 hashtmap 会导致问题,但使用 hashtable 会解决问题。
他告诉我运行代码的机器是单核的!!
我给了一个例子
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 的方法不是,我已经告诉他了
体验一下,我实现了以下。并且代码从未崩溃?我使用哈希表,但它仍然是 A 中的哈希图 :)
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();
}
}
【问题讨论】:
-
先生。 Pointy-Hair 可能认为 tb.put/tb.get 只包含一条 cpu 指令:)
-
我不明白人们为什么要投赞成票。这与差异无关,我知道,给我一个情况
-
@Pointy 头发是谁? :) 面试官?