java中hashtable和hashmap的区别我知道,就是有一点不太理解,线程安全和不安全好像没有实际区别啊?

hashtable是线程安全的,我开启多线程对同一个hashtable和hashmap读写,测试结果发现没什么区别。看不到实际的区别?谁能用简单的代码给我演示一下这两个在... hashtable是线程安全的,我开启多线程对同一个hashtable和hashmap读写,测试结果发现没什么区别。看不到实际的区别?谁能用简单的代码给我演示一下这两个在线程方面安全性的区别?感激不尽啦!!! 展开
 我来答
wujiang624
2014-06-11 · TA获得超过142个赞
知道答主
回答量:131
采纳率:0%
帮助的人:131万
展开全部
package test;

import java.util.HashMap;
import java.util.Hashtable;
import java.util.concurrent.CountDownLatch;

public class HashTbAndHashMap {

public static void main(String[] args) {

for (int i = 0; i < 10; i++) {
//testHashMap();
testHashTable();
}
}

public static void testHashMap() {

HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();

int nbthread = 1000;

CountDownLatch countDownLatch = new CountDownLatch(nbthread);

for (int i = 0; i < nbthread; i++) {
Thread thread = new Thread(new MyThread(map, countDownLatch));
thread.start();
}

try {
countDownLatch.await();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

System.out.println(map.size());
}

public static void testHashTable() {

Hashtable<Integer, Integer> table = new Hashtable<Integer, Integer>();

int nbthread = 1000;

CountDownLatch countDownLatch = new CountDownLatch(nbthread);

for (int i = 0; i < nbthread; i++) {
Thread thread = new Thread(new MyThread(table, countDownLatch));
thread.start();
}

try {
countDownLatch.await();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

System.out.println(table.size());
}
}

=======================
package test;

import java.util.HashMap;
import java.util.Hashtable;
import java.util.concurrent.CountDownLatch;

public class MyThread implements Runnable {


private HashMap<Integer, Integer> map;

private Hashtable<Integer, Integer> table;

private CountDownLatch countDownLatch;

public MyThread(HashMap<Integer, Integer> map, CountDownLatch countDownLatch) {
this.map = map;
this.countDownLatch = countDownLatch;
}

public MyThread(Hashtable<Integer, Integer> table,
CountDownLatch countDownLatch) {
this.table = table;
this.countDownLatch = countDownLatch;
}

@Override
public void run() {
for (int i = 0; i < 100; i++) {
table.put(i, i);
//map.put(i, i);
}
countDownLatch.countDown();
}

}

你执行一下就看出来区别了
更多追问追答
追问
没看出来什么区别啊》??
hashmap一运行就直接报错了。
追答
run 里面 一个 是table 一个是map. 运行相应的test时候注意把前面的 // 去掉
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式