散列表和散列表之间的区别
可能重复:
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条语句
有人可以澄清一下,什么时候会出现问题? 任何情况的例子?
编辑:我通过interchaing hashmap和hashtable发布了问题。我知道hashtable方法是同步的,而hashmap的方法不是,我已经告诉他了
为了体验我实现以下。并且代码从未崩溃? 我dint使用散列表,但它仍然是一个哈希映射:)
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();
}
}
我想你在问之前必须先做以下事情:
以上两种方法得到以下结果:
StackOverflow:HashMap和Hashtable之间的区别?
谷歌
HashMap和Hashtable有什么区别
HashMap和HashTable之间的区别? 我们可以让hashmap同步吗?
希望帮助:)
与新的集合实现不同,Hashtable是同步的。 这就是为什么我可以想象使用Hashmap会产生问题的情况,并且使用Hashtable可以解决它。
单核的事实并不重要:如果Thread1在put
调用过程中被抢占,Thread2将会看到不一致的状态,并且可能会崩溃。
那么,仅仅因为它是单核心的,并不意味着你不能有竞争条件。 它可能(可能?)意味着你不会有内存可见性问题,但是你当然可以在单个内核上运行多个线程,并且仍然可以调度它们,以便获得竞争条件。
链接地址: http://www.djcxy.com/p/16349.html