最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java編程中線程池的基本概念和使用

 更新時間:2015年11月16日 08:54:20   投稿:goldensun  
這篇文章主要介紹了Java編程中線程池的基本概念和使用,多線程編程是使Java程序實現(xiàn)并發(fā)的一個重要手段,需要的朋友可以參考下

1 引入線程池的原因
  由于線程的生命周期中包括創(chuàng)建、就緒、運行、阻塞、銷毀階段,當我們待處理的任務數(shù)目較小時,我們可以自己創(chuàng)建幾個線程來處理相應的任務,但當有大量的任務時,由于創(chuàng)建、銷毀線程需要很大的開銷,運用線程池這些問題就大大的緩解了。

2 線程池的使用
  我們只需要運用Executors類給我們提供的靜態(tài)方法,就可以創(chuàng)建相應的線程池:

  public static ExecutorSevice newSingleThreadExecutor()

  public static ExecutorSevice newFixedThreadPool()

  public static ExecutorSevice newCachedThreadPool()

  newSingleThreadExecutor返回以個包含單線程的Executor,將多個任務交給此Exector時,這個線程處理完一個任務后接著處理下一個任務,若該線程出現(xiàn)異常,將會有一個新的線程來替代。

  newFixedThreadPool返回一個包含指定數(shù)目線程的線程池,如果任務數(shù)量多于線程數(shù)目,那么沒有沒有執(zhí)行的任務必須等待,直到有任務完成為止。

  newCachedThreadPool根據(jù)用戶的任務數(shù)創(chuàng)建相應的線程來處理,該線程池不會對線程數(shù)目加以限制,完全依賴于JVM能創(chuàng)建線程的數(shù)量,可能引起內(nèi)存不足。

  我們只需要將待執(zhí)行的任務放入run方法中即可,將Runnable接口的實現(xiàn)類交給線程池的execute方法,作為它的一個參數(shù),如下所示:

Executor executor = Executors.newSingleThreadExecutor();
executor.execute(new Runnable(){
  public void run(){
    //執(zhí)行的任務  
 }
}

  如果需要給任務傳遞參數(shù),可以通過創(chuàng)建一個Runnable接口的實現(xiàn)類來完成。

3.實例
(1):newSingleThreadExecutor
MyThread.java

publicclassMyThread extends Thread {
  @Override
  publicvoid run() {
    System.out.println(Thread.currentThread().getName() + "正在執(zhí)行。。。");
  }
}
TestSingleThreadExecutor.java
publicclassTestSingleThreadExecutor {
  publicstaticvoid main(String[] args) {
    //創(chuàng)建一個可重用固定線程數(shù)的線程池
    ExecutorService pool = Executors. newSingleThreadExecutor();
    //創(chuàng)建實現(xiàn)了Runnable接口對象,Thread對象當然也實現(xiàn)了Runnable接口
    Thread t1 = new MyThread();
    Thread t2 = new MyThread();
    Thread t3 = new MyThread();
    Thread t4 = new MyThread();
    Thread t5 = new MyThread();
    //將線程放入池中進行執(zhí)行
    pool.execute(t1);
    pool.execute(t2);
    pool.execute(t3);
    pool.execute(t4);
    pool.execute(t5);
    //關閉線程池
    pool.shutdown();
  }
}

輸出結果

pool-1-thread-1正在執(zhí)行。。。
pool-1-thread-1正在執(zhí)行。。。
pool-1-thread-1正在執(zhí)行。。。
pool-1-thread-1正在執(zhí)行。。。
pool-1-thread-1正在執(zhí)行。。。

(2):newFixedThreadPool
TestFixedThreadPool.Java

publicclass TestFixedThreadPool {
  publicstaticvoid main(String[] args) {
    //創(chuàng)建一個可重用固定線程數(shù)的線程池
    ExecutorService pool = Executors.newFixedThreadPool(2);
    //創(chuàng)建實現(xiàn)了Runnable接口對象,Thread對象當然也實現(xiàn)了Runnable接口
    Thread t1 = new MyThread();
    Thread t2 = new MyThread();
    Thread t3 = new MyThread();
    Thread t4 = new MyThread();
    Thread t5 = new MyThread();
    //將線程放入池中進行執(zhí)行
    pool.execute(t1);
    pool.execute(t2);
    pool.execute(t3);
    pool.execute(t4);
    pool.execute(t5);
    //關閉線程池
    pool.shutdown();
  }
}

輸出結果

pool-1-thread-1正在執(zhí)行。。。
pool-1-thread-2正在執(zhí)行。。。
pool-1-thread-1正在執(zhí)行。。。
pool-1-thread-2正在執(zhí)行。。。
pool-1-thread-1正在執(zhí)行。。。

(3): newCachedThreadPool
TestCachedThreadPool.java

publicclass TestCachedThreadPool {
  publicstaticvoid main(String[] args) {
    //創(chuàng)建一個可重用固定線程數(shù)的線程池
    ExecutorService pool = Executors.newCachedThreadPool();
    //創(chuàng)建實現(xiàn)了Runnable接口對象,Thread對象當然也實現(xiàn)了Runnable接口
    Thread t1 = new MyThread();
    Thread t2 = new MyThread();
    Thread t3 = new MyThread();
    Thread t4 = new MyThread();
    Thread t5 = new MyThread();
    //將線程放入池中進行執(zhí)行
    pool.execute(t1);
    pool.execute(t2);
    pool.execute(t3);
    pool.execute(t4);
    pool.execute(t5);
    //關閉線程池
    pool.shutdown();
  }
}

輸出結果:

pool-1-thread-2正在執(zhí)行。。。
pool-1-thread-4正在執(zhí)行。。。
pool-1-thread-3正在執(zhí)行。。。
pool-1-thread-1正在執(zhí)行。。。
pool-1-thread-5正在執(zhí)行。。。

(4):newScheduledThreadPool
TestScheduledThreadPoolExecutor.java

publicclass TestScheduledThreadPoolExecutor {
  publicstaticvoid main(String[] args) {
    ScheduledThreadPoolExecutor exec = new ScheduledThreadPoolExecutor(1);
    exec.scheduleAtFixedRate(new Runnable() {//每隔一段時間就觸發(fā)異常
           @Override
           publicvoid run() {
              //throw new RuntimeException();
              System.out.println("================");
           }
         }, 1000, 5000, TimeUnit.MILLISECONDS);
    exec.scheduleAtFixedRate(new Runnable() {//每隔一段時間打印系統(tǒng)時間,證明兩者是互不影響的
           @Override
           publicvoid run() {
              System.out.println(System.nanoTime());
           }
         }, 1000, 2000, TimeUnit.MILLISECONDS);
  }
}

輸出結果

================
8384644549516
8386643829034
8388643830710
================
8390643851383
8392643879319
8400643939383

相關文章

  • java兩個數(shù)組合并為一個數(shù)組的幾種方法

    java兩個數(shù)組合并為一個數(shù)組的幾種方法

    這篇文章主要給大家介紹了關于java兩個數(shù)組合并為一個數(shù)組的幾種方法,最近在寫代碼時遇到了需要合并兩個數(shù)組的需求,文中將每種方法都介紹的非常詳細,需要的朋友可以參考下
    2023-07-07
  • MyBatis-Plus實現(xiàn)多數(shù)據(jù)源的示例代碼

    MyBatis-Plus實現(xiàn)多數(shù)據(jù)源的示例代碼

    這篇文章主要介紹了MyBatis-Plus實現(xiàn)多數(shù)據(jù)源的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-11-11
  • java單例五種實現(xiàn)模式解析

    java單例五種實現(xiàn)模式解析

    這篇文章主要介紹了java單例五種實現(xiàn)模式解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-09-09
  • Java隨機數(shù)算法原理與實現(xiàn)方法實例詳解

    Java隨機數(shù)算法原理與實現(xiàn)方法實例詳解

    這篇文章主要介紹了Java隨機數(shù)算法原理與實現(xiàn)方法,簡單分析了隨機數(shù)算法的原理并結合具體實例形式給出了java編程計算隨機數(shù)的具體操作技巧,需要的朋友可以參考下
    2017-09-09
  • Java中Objects.equals踩坑記錄

    Java中Objects.equals踩坑記錄

    最近在工作中發(fā)現(xiàn)一個問題,覺著還是挺有必要記錄下的,這篇文章主要給大家介紹了關于Java中Objects.equals踩坑的相關資料,需要的朋友可以參考下
    2022-03-03
  • java實現(xiàn)簡易的學籍管理系統(tǒng)

    java實現(xiàn)簡易的學籍管理系統(tǒng)

    這篇文章主要為大家詳細介紹了java實現(xiàn)簡易的學籍管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • SpringBoot解決mysql連接8小時問題

    SpringBoot解決mysql連接8小時問題

    服務連接mysql數(shù)據(jù)庫,8小時沒有數(shù)據(jù)庫的操作時候,數(shù)據(jù)庫會主動斷開連接釋放資源,本文就詳細的介紹一下解決方法,感興趣的可以了解一下
    2023-08-08
  • Mybatis之Mapper動態(tài)代理實例解析

    Mybatis之Mapper動態(tài)代理實例解析

    這篇文章主要介紹了Mybatis之Mapper動態(tài)代理實例解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-08-08
  • Springboot實現(xiàn)過濾器的兩種方式

    Springboot實現(xiàn)過濾器的兩種方式

    今天通過本文給大家分享Springboot實現(xiàn)過濾器的兩種方式,第一種是spring容器注冊filter,第二種方式是通過@WebFilter 注解來配置,本文通過實例代碼給大家介紹的非常詳細,需要的朋友參考下吧
    2023-10-10
  • Java中的定時器Timer詳解

    Java中的定時器Timer詳解

    這篇文章主要為大家詳細介紹了Java定時器Timer的使用方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08

最新評論

桂阳县| 柳州市| 德安县| 长泰县| 三门峡市| 西林县| 临桂县| 荃湾区| 忻州市| 枞阳县| 凤台县| 山阳县| 巫溪县| 青田县| 拉孜县| 海伦市| 库尔勒市| 屯昌县| 安康市| 咸宁市| 石林| 和政县| 宁武县| 和田县| 农安县| 玛纳斯县| 南木林县| 怀安县| 南京市| 德江县| 湖州市| 南木林县| 弋阳县| 清水河县| 桑日县| 南丰县| 曲水县| 库伦旗| 梁山县| 滨海县| 西峡县|