hashmap和hashtable的区别|

Aks*_*hay 5 java hashtable hashmap

可能的重复:
HashMap 和 Hashtable 之间的区别?

前几天去面试,面试官问我什么情况下使用hashmap而不是hashtable会有问题?意思是给出一个例子,其中 hashtmap 使用会导致问题,但使用 hashtable 将解决问题。

他告诉我运行代码的机器是单核的!

我给了一个例如

Time        Thread1            Thread 2
   t0    tb.put("a",1)       
   t1     tb.put("a",2)          int a = tb.get("a"); 
Run Code Online (Sandbox Code Playgroud)

我告诉过,如果在 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();
    }
}
Run Code Online (Sandbox Code Playgroud)

ysh*_*vit 0

嗯,仅仅因为它是单核,并不意味着你不能有竞争条件。这可能(可能?)意味着您不会遇到内存可见性问题,但您当然可以在单个核心上运行多个线程,并且仍然可以对它们进行调度,以便您获得竞争条件。