并发容器框架
1.多线程中的容器
上图是Java中的集合框架结构,当我们在单线程中使用集合框架中,一切都是顺理成章的。但到了多线程环境,由于基础容器就没有做同步处理,可能会出现很多线程安全的问题。最常见的问题就是常用的HashMap在多线程环境下执行put方法时可能会形成环链而导致死循环,从而占尽CPU。
Java在util集合框架的基础上又添加了线程安全的集合框架,在util包下的concurrent子包中。
举个例子,上面说的HashMap在多线程环境中的问题就可以使用ConcurrentHashMap来解决,在ConcurrentHashMap中,使用一种叫多段锁的机制,HashTable虽然是线程安全的,但所有的数据都共用一把锁,所以在数据访问的时候所有线程将会竞争同一把锁,这样就把并发转化成了串行,大大降低了性能。而多段锁机制是把数据切分成多段,每段有一把锁,这样在访问不同段的时候就可以实现并发。ConcurrentHashMap的数据结构是维持一个叫做Segment的数组,每个S