熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java高級技術 >> 正文

Java線程池在使用中的問題解疑

2022-06-13   來源: Java高級技術 

  Java線程池需要我們不斷的學習其實我們在使用的時候還是有不少問題需要我們解決我們實現了一個簡單的Java線程池現在我們就可以使用它了下面的代碼做了一個簡單的示例

  Java代碼

  public class SimpleTaskTest extends Task {

  @Override

  public void deal() {

  // do something

  }

  public static void main(String[] args) throws InterruptedException {

  ThreadPoolService service = new ThreadPoolService();

  servicestart();

  // 執行十次任務

  for (int i = ; i < ; i++) {

  servicerunTask(new SimpleTaskTest());

  }

  // 睡眠秒鐘等待所有任務執行完畢

  Threadsleep();

  servicestop();

  }

  }

  public class SimpleTaskTest extends Task {

  @Override

  public void deal() {

  // do something

  }

  public static void main(String[] args) throws InterruptedException {

  ThreadPoolService service = new ThreadPoolService();

  servicestart();

  // 執行十次任務

  for (int i = ; i < ; i++) {

  servicerunTask(new SimpleTaskTest());

  }

  // 睡眠秒鐘等待所有任務執行完畢

  Threadsleep();

  servicestop();

  }

  }

  當然我們實現的是最簡單的這裡只是為了演示Java線程池的實現原理在實際應用中根據情況的不同可以做很多優化比如

  調整任務隊列的規則給任務設置優先級級別高的任務優先執行

  動態維護Java線程池當待執行任務數量較多時增加線程的數量加快任務的執行速度當任務較少時回收一部分長期閒置的Java線程池減少對系統資源的消耗

  事實上Java及以上版本已經為我們提供了線程池功能無需再重新實現這些類位於ncurrent包中

  Executors類提供了一組創建Java線程池對象的方法常用的有一下幾個

  Java代碼

  public static ExecutorService newCachedThreadPool() {

  // other code

  }

  public static ExecutorService newFixedThreadPool(int nThreads) {

  // other code

  }

  public static ExecutorService newSingleThreadExecutor() {

  // other code

  }

  public static ExecutorService newCachedThreadPool() {

  // other code

  }

  public static ExecutorService newFixedThreadPool(int nThreads) {

  // other code

  }

  public static ExecutorService newSingleThreadExecutor() {

  // other code

  }

  newCachedThreadPool()方法創建一個動態的線程池其中線程的數量會根據實際需要來創建和回收適合於執行大量短期任務的情況newFixedThreadPool(int nThreads)方法創建一個包含固定數量線程對象的Java線程池nThreads代表要創建的線程數如果某個線程在運行的過程中因為異常而終止了那麼一個新的線程會被創建和啟動來代替它而newSingleThreadExecutor()方法則只在線程池中創建一個線程來執行所有的任務


From:http://tw.wingwit.com/Article/program/Java/gj/201311/27383.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.