Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 中級開發 >> Android開發之Java並發包集合類性能分析

Android開發之Java並發包集合類性能分析

編輯:中級開發

上一次我們主要分析了Java集合類在單線程和多線程下的性能 android開發之Java集合類性能分析,今天android123就並發包concurrent庫中的集合類性能做簡單的評估分析。

  並發包Java.util.concurrent庫是JDK 1.5中加入的,android可以很好的支持,在線程的控制和同步管理方面比Thread有更好的表現,就其中的ConcurrentHashMap、CopyOnWriteArrayList、CopyOnWriteArraySet以及ArrayBlockingQueue和前面的HashMap、ListArray、Set以及Queue最簡單的性能對比在多線程下。

  一、ConcurrentHashMap是線程安全版的HashMap,它的構造同樣有initialCapacity和loadFactor系數屬性,但是還多了一個concurrentcyLevel,默認空構造方法下,這三個值為16、0.75和16。在ConcurrentHashMap內部並不是通過synchronized實現同步的,如果傳入的對象value為null將會拋出空指針異常,而防止沖突仍然使用Java Object類的hashcode方法實現的。

  1) 單線程下,100個元素

  ConcurrentHashMap 的添加效率遠差於 HashMap,不過整體一般的應用幾乎感覺不到。

  2) 多線程下,100個元素

  在10個線程下它們兩個的性能差不多,不過這時候ConcurrentHashMap性能已經超越了HashMap無論元素多少,而隨著線程數的增加效率提升明顯,不過對於android手機這樣的應用,應用超過10個線程可能不是很多,不過對於Java VM而言,並發包在多線程下性能優勢明顯,強烈推薦。

  二、CopyOnWriteArrayList是一個線程安全版的ArrayList,但在讀取元素時CopyOnWriteArrayList是無鎖的,通過這點可以看出它的內部並不是簡單實用synchronized關鍵字實現加鎖的,對於並發包來說內部使用了ReentrantLock實現線程安全訪問的。對於元素增加來說CopyOnWriteArrayList的新內存分配是通過創建一個比原始大1的緩沖區,將老的數據復制到新的緩沖區,新增的元素加到數組尾部實現元素添加的。刪除時也是通過ReentrantLock實現的,比ArrayList的刪除操作復雜一些,首先創建一個比當前數組元素少1的緩沖區,然後復制現有的數組到緩沖區,但復制的過程中比現有的數組少1,和添加元素正好相反。android開發網提示大家CopyOnWriteArrayList使用的添加和刪除並不是類似ArrayList那樣簡單的System.arrayCopy,所以性能上肯定和ArrayList有些出入。

  1) 單線程下,100個元素

  CopyOnWriteArrayList在元素添加、刪除時比ArrayList慢了近一倍,但查找性能沒有多大變化,但是隨著元素的增加,在單線程下CopyOnWriteArrayList效率大不如ArrayList,在元素數量達到100以後時。

 2) 多線程下,100個元素

  這裡android123主要測試手機上可能發生的10個線程,這樣環境下CopyOnWriteArrayList的添加和刪除效率也是遠不如ArrayList,但查找效率已經快於ArrayList,當元素增加到10000個時,他們的添加和刪除效率相當,但CopyOnWriteArrayList的查找效率遠大於ArrayList。

  三、CopyOnWriteArraySet 是基於CopyOnWriteArrayList的,由於Set機制不允許重復,所以CopyOnWriteArraySet的add方法在處理元素添加時,調用CopyOnWriteArrayList內部的addIfAbsent方法,如果存在了則返回,不過仍然效率不是很理想。在添加時由於做了額外的操作,所以再添加時比CopyOnWriteArrayList慢,其他和CopyOnWriteArrayList相同。

  四、ArrayBlockingQueue 從名字來看就知道是一個隊列,不過屬於FIFO的線程安全隊列,結構類似棧。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved