亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

java編寫屬于自己的線程池

2024-07-14 08:40:07
字體:
來源:轉載
供稿:網友

什么是線程池

線程池就是以一個或多個線程[循環執行]多個應用邏輯的線程集合.

一般而言,線程池有以下幾個部分:

完成主要任務的一個或多個線程.
用于調度管理的管理線程.
要求執行的任務隊列.

線程池的作用:

線程池作用就是限制系統中執行線程的數量。
根據系統的環境情況,可以自動或手動設置線程數量,達到運行的最佳效果;少了浪費了系統資源,多了造成系統擁擠效率不高。用線程池控制線程數量,其他線程排隊等候。一個任務執行完畢,再從隊列的中取最前面的任務開始執行。若隊列中沒有等待進程,線程池的這一資源處于等待。當一個新任務需要運行時,如果線程池中有等待的工作線程,就可以開始運行了;否則進入等待隊列。

自己實現線程池

根據如上對線程池的理解,我們自己編寫一個屬于自己的簡單線程池:

簡單的線程池接口:

public interface ThreadPool<Job extends Runnable>{  //執行一個任務(Job),這個Job必須實現Runnable  void execute(Job job); //關閉線程池 void shutdown(); //增加工作者線程,即用來執行任務的線程 void addWorkers(int num); //減少工作者線程 void removeWorker(int num); //獲取正在等待執行的任務數量 void getJobSize();}

客戶端可以通過execute(Job)方法將Job提交入線程池來執行,客戶端完全不用等待Job的執行完成。除了execute(Job)方法以外,線程池接口提供了增加/減少工作者線程以及關閉線程池的方法。每個客戶端提交的Job都會進入到一個工作隊列中等待工作者線程的處理。

線程池接口的默認實現

public class DefaultThreadPool<Job extends Runnable> implements ThreadPool<Job>{  // 線程池維護工作者線程的最大數量  private static final int MAX_WORKER_NUMBERS = 10;  // 線程池維護工作者線程的默認值  private static final int DEFAULT_WORKER_NUMBERS = 5;  // 線程池維護工作者線程的最小數量  private static final int MIN_WORKER_NUMBERS = 1;  // 維護一個工作列表,里面加入客戶端發起的工作  private final LinkedList<Job> jobs = new LinkedList<Job>();  // 工作者線程的列表  private final List<Worker> workers = Collections.synchronizedList(new ArrayList<Worker>());  // 工作者線程的數量  private int workerNum;  // 每個工作者線程編號生成  private AtomicLong threadNum = new AtomicLong(); //生成線程池public DefaultThreadPool() {    this.workerNum = DEFAULT_WORKER_NUMBERS;    initializeWorkers(this.workerNum);  }  public DefaultThreadPool(int num) {    if (num > MAX_WORKER_NUMBERS) {      this.workerNum =DEFAULT_WORKER_NUMBERS;    } else {      this.workerNum = num;    }    initializeWorkers(this.workerNum);  }//初始化每個工作者線程private void initializeWorkers(int num) {    for (int i = 0; i < num; i++) {      Worker worker = new Worker();      //添加到工作者線程的列表      workers.add(worker);      //啟動工作者線程      Thread thread = new Thread(worker);      thread.start();    }  }public void execute(Job job) {    if (job != null) {    //根據線程的"等待/通知機制"這里必須對jobs加鎖      synchronized (jobs) {        jobs.addLast(job);        jobs.notify();      }    }  }  //關閉線程池即關閉每個工作者線程   public void shutdown() {    for (Worker w : workers) {      w.shutdown();    }  }   //增加工作者線程    public void addWorkers(int num) {    //加鎖,防止該線程還么增加完成而下個線程繼續增加導致工作者線程超過最大值    synchronized (jobs) {      if (num + this.workerNum > MAX_WORKER_NUMBERS) {        num = MAX_WORKER_NUMBERS - this.workerNum;      }      initializeWorkers(num);      this.workerNum += num;    }  }  //減少工作者線程public void removeWorker(int num) {    synchronized (jobs) {    if(num>=this.workerNum){         throw new IllegalArgumentException("超過了已有的線程數量");         }      for (int i = 0; i < num; i++) {        Worker worker = workers.get(i);        if (worker != null) {        //關閉該線程并從列表中移除          worker.shutdown();          workers.remove(i);        }      }      this.workerNum -= num;    }  }public int getJobSize() {    // TODO Auto-generated method stub    return workers.size();  }//定義工作者線程class Worker implements Runnable {    // 表示是否運行該worker    private volatile boolean running = true;    public void run() {      while (running) {        Job job = null;        //線程的等待/通知機制        synchronized (jobs) {          if (jobs.isEmpty()) {            try {              jobs.wait();//線程等待喚醒            } catch (InterruptedException e) {              //感知到外部對該線程的中斷操作,返回              Thread.currentThread().interrupt();              return;            }          }          // 取出一個job          job = jobs.removeFirst();        }        //執行job        if (job != null) {          job.run();        }      }    }    // 終止該線程    public void shutdown() {      running = false;    }  }}



從線程池的實現中可以看出,當客戶端調用execute(Job)方法時,會不斷地向任務列表jobs中添加Job,而每個工作者線程會不讀的從jobs上獲取Job來執行,當jobs為空時,工作者線程進入WAITING狀態。

當添加一個Job后,對工作隊列jobs調用其notify()方法來喚醒一個工作者線程。此處我們不調用notifyAll(),避免將等待隊列中的線程全部移動到阻塞隊列中而造成資源浪費。

線程池的本質就是使用了一個線程安全的工作隊列連接工作者線程和客戶端線程??蛻舳司€程把任務放入工作隊列后便返回,而工作者線程則不端的從工作隊列中取出工作并執行。當工作隊列為空時,工作者線程進入WAITING狀態,當有客戶端發送任務過來后會通過任意一個工作者線程,隨著大量任務的提交,更多的工作者線程被喚醒。

參考: 《java并發編程的藝術》 方騰飛


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美国产精品va在线观看| 亚洲电影中文字幕| 亚洲精品美女免费| 精品欧美国产一区二区三区| 欧美日韩亚洲精品内裤| 性欧美在线看片a免费观看| 国产在线拍揄自揄视频不卡99| 在线观看日韩欧美| 欧美电影第一页| 国产精品久久久久福利| 高清欧美一区二区三区| 中文字幕成人精品久久不卡| 日韩精品极品在线观看| 久久久午夜视频| 中文国产亚洲喷潮| 亚洲va欧美va国产综合剧情| 欧美日韩免费在线观看| 韩曰欧美视频免费观看| 国产精品精品久久久| 欧美激情手机在线视频| 成人日韩av在线| 亚洲国产精久久久久久久| 久久久久久久久久亚洲| 久久不射电影网| 曰本色欧美视频在线| 亚洲网站在线播放| 亚洲视频日韩精品| 91精品国产高清自在线| 97视频在线观看视频免费视频| 国产成人精品综合久久久| 久久久国产精品视频| 久久男人资源视频| 亚洲专区中文字幕| 国产免费一区二区三区在线观看| 91啪国产在线| 精品久久久久人成| 91国产高清在线| 蜜臀久久99精品久久久久久宅男| 亚洲大胆人体av| 日本成人黄色片| 国产精品揄拍500视频| 亚洲激情电影中文字幕| 日韩欧美黄色动漫| 成人有码在线视频| 国产成人aa精品一区在线播放| 久久艳片www.17c.com| 亚洲老板91色精品久久| 国产精品99久久久久久久久久久久| 国产免费一区视频观看免费| 8090成年在线看片午夜| 秋霞午夜一区二区| 欧美日韩国产页| 欧美性猛交xxxx免费看久久久| 色悠悠久久88| 亚洲性视频网站| 国产xxx69麻豆国语对白| 成人a在线视频| 亚洲国产成人精品女人久久久| 91免费的视频在线播放| 精品女同一区二区三区在线播放| 欧美国产亚洲精品久久久8v| 4438全国亚洲精品在线观看视频| 少妇高潮久久77777| 日本一区二区在线播放| 欧美人在线视频| 91欧美精品成人综合在线观看| 一区二区三区回区在观看免费视频| 中文字幕免费精品一区| 欧美日韩人人澡狠狠躁视频| 欧美午夜视频一区二区| 午夜精品久久久久久久白皮肤| 午夜剧场成人观在线视频免费观看| 久久久久北条麻妃免费看| 国产日韩精品入口| 日韩性生活视频| 亚洲社区在线观看| 欧美视频免费在线观看| 欧美性xxxxxxxxx| 91精品久久久久久| 亚洲电影在线观看| 最新国产精品亚洲| 日韩精品久久久久久久玫瑰园| 日韩精品一区二区视频| 欧美大肥婆大肥bbbbb| 欧美尤物巨大精品爽| 亚洲美女免费精品视频在线观看| 日韩av片永久免费网站| 久久久久久久久国产精品| 色综合亚洲精品激情狠狠| 国产精品福利在线观看网址| 欧美性生活大片免费观看网址| 国产精品综合网站| 日韩动漫免费观看电视剧高清| 国产成人精品在线| 亚洲精品一区二区网址| 国产精品久久久久久久7电影| 国产精品色婷婷视频| 热99在线视频| 国产999在线| 美女精品久久久| 亚洲视频专区在线| 亚洲午夜小视频| 久操成人在线视频| 在线精品高清中文字幕| 国产小视频91| 欧美激情免费看| 亚洲精品乱码久久久久久金桔影视| 欧美日韩不卡合集视频| 日本精品中文字幕| 狠狠操狠狠色综合网| 国产精品美女主播在线观看纯欲| 国产91精品久| 亚洲国产天堂久久国产91| 国产亚洲精品美女久久久久| 国产精品入口夜色视频大尺度| 992tv在线成人免费观看| 久久成人国产精品| 国产欧美一区二区三区久久人妖| 国产精品海角社区在线观看| 国产精品极品美女粉嫩高清在线| 青青a在线精品免费观看| 亚洲欧美国产精品va在线观看| 国产日韩精品入口| 色综合伊人色综合网| 91在线观看免费高清| 91av中文字幕| 98精品在线视频| xxx一区二区| 在线观看欧美成人| 日韩av一区在线| 在线观看中文字幕亚洲| 国产一区二区三区精品久久久| 97视频免费在线看| 国产精品美女呻吟| 国产精品视频xxx| 777国产偷窥盗摄精品视频| 欧美日韩高清在线观看| 日韩女优人人人人射在线视频| 国产欧美久久一区二区| 97av在线播放| 日本精品视频在线观看| 欧美乱人伦中文字幕在线| 97精品国产97久久久久久| 欧美电影免费观看电视剧大全| 日本精品视频在线观看| 国产在线观看精品| 日韩亚洲一区二区| 久久在线观看视频| 精品毛片网大全| 精品日本美女福利在线观看| 久久精品中文字幕免费mv| 国产精品入口免费视频一| 国产精品爽黄69天堂a| 精品国产成人在线| 欧美日韩一区二区在线| 精品亚洲夜色av98在线观看| 欧美乱妇高清无乱码| 欧美亚洲国产日韩2020| 夜夜狂射影院欧美极品| 欧美激情视频在线免费观看 欧美视频免费一| 久久精品国产一区二区三区| 亚洲精品自拍第一页| 免费不卡在线观看av| 国产91精品视频在线观看|