線程池

什麼是線程池?如果讓你設計一個動態大小的線程池,如何設計,應該有哪些方法?
什麼是線程池

  • 線程池顧名思義就是事先創建若干個可執行的線程放入一個池(容器)中,需要的時候從池中獲取線程不用自行創建,使用完畢不需要銷燬線程而是放回池中,從而減少創建和銷燬線程對象的開銷。

設計一個動態大小的線程池,如何設計,應該有哪些方法
一個線程池包括以下四個基本組成部分:

  • 線程管理器(ThreadPool):用於創建並管理線程池,包括創建線程,銷燬線程池,添加新任務;
  • 工作線程(PoolWorker):線程池中線程,在沒有任務時處於等待狀態,可以循環的執行任務;

  • 任務接口(Task):每個任務必須實現的接口,以供工作線程調度任務的執行,它主要規定了任務的入口,任務執行完後的收尾工作,任務的執行狀態等;

  • 任務隊列(TaskQueue):用於存放沒有處理的任務。提供一種緩衝機制;

所包含的方法

  • private ThreadPool() 創建線程池

  • public static ThreadPool getThreadPool() 獲得一個默認線程個數的線程池

  • public void execute(Runnable task)
    執行任務,其實只是把任務加入任務隊列,什麼時候執行有線程池管理器決定

  • public void execute(Runnable[] task)
    批量執行任務,其實只是把任務加入任務隊列,什麼時候執行有線程池管理器決定

  • public void destroy() 銷燬線程池,該方法保證在所有任務都完成的情況下才銷燬所有線程,否則等待任務完成才銷燬

  • public int getWorkThreadNumber() 返回工作線程的個數

  • public int getFinishedTasknumber()
    返回已完成任務的個數,這裏的已完成是隻出了任務隊列的任務個數,可能該任務並沒有實際執行完成

  • public void addThread() 在保證線程池中所有線程正在執行,並且要執行線程的個數大於某一值時。增加線程池中線程的個數

  • public void reduceThread()
    在保證線程池中有很大一部分線程處於空閒狀態,並且空閒狀態的線程在小於某一值時,減少線程池中線程的個數

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