編輯:中級開發
並發包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的線程安全隊列,結構類似棧。
在Android 3.0中除了我們重點講解的Fragment外,Action Bar也是一個重要的內容,Action Bar主要是用於代替傳統的標題欄,對於androi
簡介: 有幾個網站從事一些非盈利服務,提供一些可輕松設置和使用的表單來進行民意測驗和數據收集。本教程介紹一個簡單的架構來為 android 設計類似的應用程
一個android視圖有很多控件,那麼怎麼來控制它們的位置排列呢?我們需要容器來存放這些控件並控制它們的位置排列,就像Html中div, table一樣,android
簡介: 對於需要跨應用程序執行期間或生命期而維護重要信息的應用程序來說,能夠在移動設備上本地存儲數據是一種非常關鍵的功能。作為一名開發人員,您經常需要存儲諸如