Android 開發 ThreadPool(線程池) 總結

來源:互聯網
上載者:User

標籤:

本文是介紹線程池的基礎篇。

首先介紹一個方法,擷取CPU個數:

  int cpuCount = Runtime.getRuntime().availableProcessors();

一、建立非同步線程的弊端。

  1、每次new Thread建立對象,導致效能變差。

  2、缺乏統一的管理,可能導致無限制的線程運行,嚴重的後果就是OOM 或者死機。

二、啟用線程池的優點。

  1、重用性大,減少對象的建立,提高效能。

  2、可有效控制並發線程數,提高系統資源使用率,避免資源爭奪。

  3、可提供多種功能:定時、迴圈、並發、單一等功能。

三、ExecutorService 線程池

  Java通過Executors提供了四類常用的線程池。  

1、newCachedThreadPoll

  定義一個線程池,當線程池裡面有可複用的線程,重用線程執行,如果沒有,建立線程執行。

  

2、newSingleThreadExecutor

  建立一個線程池,只有唯一的一個活動的背景工作執行緒,有序(FIFO,LIFO,優先順序等順序)的處理隊列中的任務。

  ExecutorService singleExecutor = Executors.newSingleThreadExecutor();
        for (int i = 0; i < 100; i++) {
            singleExecutor.execute(new Runnable() {
                @Override
                public void run() {
                    // TODO Auto-generated method stub
                    
                }
            });
        }  

3、newFixedThreadPool

  定義一個可用並發數的線程池,超過並發數的線程,在隊列裡面等待。

  ExecutorService fixedThread = Executors.newFixedThreadPool(3);
        for(int i = 0; i < 100 ; i ++){
            fixedThread.execute(new Runnable() {
                @Override
                public void run() {
                    // TODO Auto-generated method stub
                    
                }
            });
        }  

4、newScheduledThreadPool

  建立一個定長線程池,支援定時及週期性任務執行。

  ScheduledExecutorService scheduledThread = Executors.newScheduledThreadPool(3);
        //延時執行
        scheduledThread.schedule(new Runnable() {
            @Override
            public void run() {
                // TODO Auto-generated method stub
                
            }
        }, 2*1000, TimeUnit.SECONDS);
        //固定的間隔執行,不受任何影響
        scheduledThread.scheduleAtFixedRate(new Runnable() {
            
            @Override
            public void run() {
                // TODO Auto-generated method stub
                
            }
        }, 10*1000, 1*1000, TimeUnit.SECONDS);
        //當線程執行完畢後的,開始計算時間間隔再次執行
        scheduledThread.scheduleWithFixedDelay(new Runnable() {            
            @Override
            public void run() {
                // TODO Auto-generated method stub
                
            }
        }, 10*1000, 1*1000, TimeUnit.SECONDS);

  

四、AnsyncTask非同步線程

  提供兩個線程池:

  1、THREAD_POOL_EXECUTOR非同步線程池

    

  2、SERIAL_EXECUTOR同步線程池

 

  注意:

  1、當預設使用AsyncTask.execute()執行非同步任務,預設使用SERIAL_EXECUTOR.

  2、SERIAL_EXECUTOR是在THREAD_POOL_EXECUTOR基礎上,加一個task的集合來維護順序的。

 

Android 開發 ThreadPool(線程池) 總結

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.