Hashtable与ConcurrentHashMap入门——简单使用
Posted 流楚丶格念
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hashtable与ConcurrentHashMap入门——简单使用相关的知识,希望对你有一定的参考价值。
文章目录
1.1 Hashtable简单介绍
Hashtable和HashMap一样,是一个散列表,它存储的内容是键值对(key-value)映射。
那既然有了HashMap,为什么还要有Hashtable的出现?
Hashtable出现的原因 : 在集合类中HashMap是比较常用的集合对象,但是HashMap是线程不安全的(多线程环境下可能会存在问题)。为了保证数据的安全性我们可以使用Hashtable,但是Hashtable的效率低下。
而且,Hashtable 的函数都是同步的,这也就意味着它是线程安全的。它的key、value都不可以为null。
代码示例
import java.util.HashMap;
import java.util.Hashtable;
public class HashtableDemo
public static void main(String[] args) throws InterruptedException
Hashtable<String, String> hm = new Hashtable<>();
// 线程1 哈希表进行操作
Thread t1 = new Thread(() ->
for (int i = 0; i < 25; i++)
hm.put(i + "", i + "");
);
// 线程2 哈希表进行操作
Thread t2 = new Thread(() ->
for (int i = 25; i < 51; i++)
hm.put(i + "", i + "");
);
t1.start();
t2.start();
System.out.println("----------------------------");
// 为了t1和t2能把数据全部添加完毕
Thread.sleep(1000);
for (int i = 0; i < 51; i++)
System.out.println(hm.get(i + ""));
//0 1 2 3 .... 50
运行结果如下:
1.2 ConcurrentHashMap简单介绍
ConcurrentHashMap出现的原因 : 在集合类中HashMap是比较常用的集合对象,但是HashMap是线程不安全的(多线程环境下可能会存在问题)。为了保证数据的安全性我们可以使用Hashtable,但是Hashtable的效率低下。
基于以上两个原因我们可以使用JDK1.5以后所提供的ConcurrentHashMap。
体系结构 :
其他Map也是继承与Map接口
代码示例
import java.util.Hashtable;
import java.util.concurrent.ConcurrentHashMap;
public class MyConcurrentHashMapDemo
public static void main(String[] args) throws InterruptedException
ConcurrentHashMap<String, String> hm = new ConcurrentHashMap<>(100);
Thread t1 = new Thread(() ->
for (int i = 0; i < 25; i++)
hm.put(i + "", i + "");
);
Thread t2 = new Thread(() ->
for (int i = 25; i < 51; i++)
hm.put(i + "", i + "");
);
t1.start();
t2.start();
System.out.println("----------------------------");
//为了t1和t2能把数据全部添加完毕
Thread.sleep(1000);
//0-0 1-1 ..... 50- 50
for (int i = 0; i < 51; i++)
System.out.println(hm.get(i + ""));
//0 1 2 3 .... 50
运行结果如下:
1.3 ConcurrentHashMap、HashMap、Hashtable对比:
- HashMap是线程不安全的。多线程环境下会有数据安全问题
- Hashtable是线程安全的,但是会将整张表锁起来,效率低下
- ConcurrentHashMap也是线程安全的,效率较高。 在JDK7和JDK8中,底层原理不一样。
以上是关于Hashtable与ConcurrentHashMap入门——简单使用的主要内容,如果未能解决你的问题,请参考以下文章