在Java1.5之后,通過幾個并發容器類來改進同步容器類,同步容器類是通過將容器的狀態串行訪問,從而實現它們的線程安全的,這樣做會消弱了并發性,當多個線程并發的競爭容器鎖的時候,吞吐量會下降。那并發容器是為多線程并發而設計的。那么java1.5中添加了哪些并發容器?
我們都知道同步容器類每當執行一個操作的時候都會持有一個鎖,如果同步容器中非常大,比如遍歷查找是否存某個對象,消耗時間非常長,但是這段時間不允許其他線程訪問這個容器,這是一種糟糕是事情。下載地址 ConCurrentHashMap 和HashMap 一樣都是一個hash表,但是ConCurrentHashMap與HashMap完全使用不同的鎖策略。它可以提供更好的并發性和伸縮性。在ConCurrentHashMap之前,是使用共用一個鎖,進行同步每一個方法。并且嚴格的限制只有一個線程能同時訪問容器;而ConcurrentHashMap 使用了更加細粒度的鎖,-分離鎖( 詳情:ReentrantLock)這個鎖機制允許更深層的共享訪問,任何多線程可以并發的讀操作訪問此容器,當且僅當只用一個線程可以進行寫容器操作。這樣讀線程和寫線程都可以并發的訪問容器大大提高了吞吐量,也沒有怎么損失單線程的性能。但是,在應用的需求是線程獨占訪問枷鎖的時候,ConCurrentMap是無法勝任的。
- public E get(int index) {
- return get(getArray(), index);
- }
/** * {@inheritDoc} * * @throws IndexOutOfBoundsException {@inheritDoc} */ public E get(int index) { return get(getArray(), index); }