19.ConcurrentHashMap

首先hashMap和hashTable的简单比较


①Java5.0在Java.util.concurrent包中提供了多种并发容器类来改进同步容器的性能。

②ConcurrentHashMap同步容器时Java5增加的一个线程安全的哈希表。对与多线程的操作,介于HashMap和HashTable之间。内部采用“锁分段”机制替代Hashtable的独占锁,进而提高性能


③此包还提供了设计用于多线程上下文的Collection实现:ConcurrentHashMap、ConcurrentSkipListMap、ConcurrentSkipListSet、CopyOnWriteArrayList和CopyOnWriteArraySet。当期望许多线程访问一个给定的collection时,ConcurrentHashMap通常优于同步的HashMap,ConcurrentSkipListMap通产优于同步的TreeMap。当期望的读数和遍历远远大于列表的更新数时,CopyOnWriteArrayList优于同步的ArrayList。

案例:

import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
/**
 *	CopyOnWriteArrayList:写入并复制,效率低,
 *		添加操作多时,效率低,因为每次添加时都会进行复制,开销非常的大
 *		并发迭代多时可以选择。 
 */
public class TestCopyOnWriteArrayList {
	public static void main(String[] args) {
		HelloThread ht = new HelloThread();
		for(int i = 0;i<10;i++){
			new Thread(ht).start();
		}
	}
}
class HelloThread implements Runnable{
	/**
	 *  这种方式会出错:java.util.ConcurrentModificationException
	 */
	//private static List<String> list = Collections.synchronizedList(new ArrayList<String>());
	private static CopyOnWriteArrayList<String> list = new CopyOnWriteArrayList<String>(); 
	static {
		list.add("AA");
		list.add("BB");
		list.add("CC");
	}
	public void run() {
		Iterator<String> it = list.iterator();
		while(it.hasNext()){
			System.out.println(it.next());
		}
		list.add("DD");
	}
}
注意:CopyOnWriteArrayList:写入并复制。添加操作多时,效率低,因为每次添加时都会进行复制,开销非常的大;并发迭代多时可以选择。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值