Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android線程池-學習總結

Android線程池-學習總結

編輯:關於Android編程

線程池:

一個線程池中會緩存一定數量的線程,通過線程池就可以避免因為頻繁創建和銷毀線程所帶來的系統開銷。Android中的線程池來源於Java,主要是通過Executor來派生特定類型的線程池。

優點: 1、重用的線程池中的線程,避免因為線程的創建和銷毀所帶來的性能開銷。 2、避免大量的線程間因互相搶占系統資源導致的阻塞現象; 3、能夠對線程進行簡單的管理並提供定時執行,間隔執行等功能;

Android中的線程池來源於Executor,Executor是一個接口,真正線程池實現為ThreadPoolExecutor,通過ThreadPoolExecutor提供的一系列參數來配置線程池,不同參數可以創建不同的線程池。其中Android中常見的四類具有不同功能的線程池為:FixThreadPool、CachedThreadPool、ScheduledThreadPooI、SingThreadExecutor。除了以上四種線程池外,我們可以根據情況自己設置參數自定義線程池。

首先我們先了解一下Android中ThreadPoolExecutor,它的構造方法提供了一系列參數來配置線程池。下面是一個比較常用的構造方法。


corePoolSize:核心線程數,核心線程會一直存活,即使沒有任務需要處理。如果將ThreadPoolExecutor的allowCoreThreadTimeOut屬性設置為true,那麼閒置的核心線程在等待新任務到來時會有超時策略,這個時間間隔由keepAliveTime所指定,當等待時間超過keepAliveTime所指定的時長後,核心線 程就會被終止。

maximumPoolSize:線程池所能容納的最大線程數,當活動線程數達到這個數值後,後續的新任務將會被阻塞。

keepAliveTime:當線程空閒時間達到keepAliveTime,該線程會退出,直到線程數量等於corePoolSize。如果allowCoreThreadTimeout設置為true,則所有線程均會退出直到線程數量為0。

unit:用於指定keepAliveTime參數的時間單位,這是一個枚舉,常用的有
TimeUnit.MILLISECONDS、TimeUnit.SECOND、TimeUnit.MINUTES。

workQueue:線程池中的任務隊列,通過線程池的execute方法提交的Runnable對象會存儲在這個參數中。

threadFactory:線程工廠,為線程池提供創建新線程的功能。

ThreadPoolExecutor執行任務時大致遵循如下規則 : 1.如果線程池中的數量未達到核心線程的數量,那麼會直接啟動一個核心線程來執行任務。 2.如果線程池中的線程數量已經到或者超過核心線程的數量,那麼任務會被插入到任務隊列中排隊等待執行。 3.如果在步驟2中無法將任務插入到任務隊列中,這往往是由於任務隊列已滿,這個時候如果線程數量未達到線程池規定的最大值,那麼會立刻啟動一個非核心線程來執行。 4.如果步驟3中線程數量已經達到線程池規定的最大值,那麼就拒絕執行此任務,ThreadPoolExecutor會調用RejectedExecutionHandler的rejectedExecution方法來通知調用者。

四類常見線程池:

1、FixedThreadPool:通過Executors的newFixedThreadPool方法來創建。它是一種線程數量固定的線程池,當線程處於空閒狀態時,它們並不會被回收,除非線程池被關閉了。FixedThreadPool中只有核心線程並且這些核心線程沒有超時機制,另外任務隊列也是沒有大小限制的。\


程序中調用:\


2、CachedThreadPool:它是一種線程數量不定的線程池,最大線程數可以任意大。這類線程池比較適合執行大量的耗時較少的任務。當整個線程池處於閒置狀態時,線程池中的線程都會超時而被停止,這個時候CachedThreadPool之中實際是沒有任何線程的,它幾乎不占用任何系統資源。\


程序中調用:\


3.ScheduledThreadPool:它的核心線程數量是固定的,而非核心線程數量是沒有限制的,並且當非核心線程閒置時會被立即回收。這類線程池主要用於執行定時任務和具有固定周期的重復任務。\


程序中調用:\


4、SingleThreadExecutor:它的線程池內部只有一個核心線程,它確保所有的任務都在同一個線程中按順序執行。其意義在於統一所有的外界任務到一個線程中,使得在這些任務之間不需要處理線程同步的問題。\


程序中調用:\


自定義線程池:\


代碼中的注釋已經詳細講解了線程池的實現方式,在此不再傲述。

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