【android學習記錄】ThreadPool線程池的使用

/**
 * Created by 123 on 2018/2/26.
 *
 * 線程池的使用
 */

public class ThreadPool {


    /**
     * 線程池構造函數
     *
     * @corePoolSize 線程池之中核心線程數量
     *
     * @maximumPoolSize 線程池中最大線程數量
     *
     * @keepAliveTime 非核心線程超過限制時間,會被回收;
     *                如果ThreadPoolExecutorallowCoreThreadTimeOut屬性設置爲true     *                則該參數也表示核心線程的超時時長。
     *
     * @unit 超時時長的單位
     *
     * @workQueue 線程池中的隊列,儲存已經被提交但是尚未執行的任務;
     *            存儲在這裏的任務是由ThreadPoolExecutorexecute方法提交來的。
     *
     * @threadFactory 爲線程池提供新線程的功能,一般使用默認。
     *
     * @handler  拒絕策略,當線程無法執行新任務時
     *          (一般是由於線程池中的線程數量已經達到最大數或者線程池關閉導致的),
     *          默認情況下,當線程池無法處理新線程時,會拋出一個RejectedExecutionException     *
     * */
//    public  ThreadPoolExecutor(int corePoolSize,
//                              int maximumPoolSize,
//                              long keepAliveTime,
//                              TimeUnit unit,
//                              BlockingQueue<Runnable> workQueue,
//                              ThreadFactory threadFactory,
//                              RejectedExecutionHandler handler)



    /**
     * 新開一個線程之後的各種情況
     *
     * 1.execute一個線程之後,如果線程池中的線程數未達到核心線程數,則會立馬啓用一個核心線程去執行
     * 2.execute一個線程之後,如果線程池中的線程數已經達到核心線程數,且workQueue未滿,則將新線程放入workQueue中等待執行
     * 3.execute一個線程之後,如果線程池中的線程數已經達到核心線程數但未超過非核心線程數,且workQueue已滿,則開啓一個非核心線程來執行任務
     * 4.execute一個線程之後,如果線程池中的線程數已經超過非核心線程數,則拒絕執行該任務
     */


    private ThreadPoolExecutor poolExecutor
            =new ThreadPoolExecutor(
                    3,
            5,
            1,
            TimeUnit.SECONDS,
            new LinkedBlockingDeque<Runnable>(128)
            );


    private void test(){

        Runnable runnable=new Runnable() {
            @Override
            public void run() {
                SystemClock.sleep(2000);
            }
        };
        poolExecutor.execute(runnable);
    }


    /**
     * 參數配置參考
     *
     * 核心線程數爲手機CPU數量+1
     * cpu數量獲取方式Runtime.getRuntime().availableProcessors()),
     * 最大線程數爲手機CPU數量×2+1,線程隊列的大小爲128
     * */


}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章