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

詳談Java幾種線程池類型介紹及使用方法

 更新時間:2017年03月09日 11:03:02   投稿:jingxian  
下面小編就為大家?guī)硪黄斦凧ava幾種線程池類型介紹及使用方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

一、線程池使用場景

•單個任務(wù)處理時間短

•將需處理的任務(wù)數(shù)量大

二、使用Java線程池好處

1、使用new Thread()創(chuàng)建線程的弊端:

•每次通過new Thread()創(chuàng)建對象性能不佳。

•線程缺乏統(tǒng)一管理,可能無限制新建線程,相互之間競爭,及可能占用過多系統(tǒng)資源導(dǎo)致死機或oom。

•缺乏更多功能,如定時執(zhí)行、定期執(zhí)行、線程中斷。

2、使用Java線程池的好處:

•重用存在的線程,減少對象創(chuàng)建、消亡的開銷,提升性能。

•可有效控制最大并發(fā)線程數(shù),提高系統(tǒng)資源的使用率,同時避免過多資源競爭,避免堵塞。

•提供定時執(zhí)行、定期執(zhí)行、單線程、并發(fā)數(shù)控制等功能。

Java四種線程池

Java里面線程池的頂級接口是Executor,但是嚴格意義上講Executor并不是一個線程池,而只是一個執(zhí)行線程的工具。真正的線程池接口是ExecutorService。下面這張圖完整描述了線程池的類體系結(jié)構(gòu):

1. newCachedThreadPool

創(chuàng)建一個可根據(jù)需要創(chuàng)建新線程的線程池,但是在以前構(gòu)造的線程可用時將重用它們。對于執(zhí)行很多短期異步任務(wù)的程序而言,這些線程池通??商岣叱绦蛐阅?。調(diào)用 execute 將重用以前構(gòu)造的線程(如果線程可用)。如果現(xiàn)有線程沒有可用的,則創(chuàng)建一個新線程并添加到池中。終止并從緩存中移除那些已有 60 秒鐘未被使用的線程。因此,長時間保持空閑的線程池不會使用任何資源。

public static ExecutorService newCachedThreadPool()

示例代碼:

public class ThreadPoolExecutorTest {
   public static void main(String[] args ) {
    ExecutorService cacheThreadPool =Executors.newCachedThreadPool();
     for(int i =1;i<=5;i++){
       final int index=i ;
       try{
        Thread.sleep(1000);
      }catch(InterruptedException e ) {
         e.printStackTrace();
      }
       cacheThreadPool.execute(new Runnable(){
         @Override
         public void run() {
          System.out.println("第" +index +"個線程" +Thread.currentThread().getName());  
        }  
      });
    }
  }
}


//輸出結(jié)果
第1個線程pool-1-thread-1
第2個線程pool-1-thread-1
第3個線程pool-1-thread-1
第4個線程pool-1-thread-1 第5個線程pool-1-thread-1  

由結(jié)果可看出 當執(zhí)行第二個任務(wù)時第一個任務(wù)已經(jīng)完成,會復(fù)用執(zhí)行第一個任務(wù)的線程,而不用每次新建線程。

2. newFixedThreadPool

創(chuàng)建一個指定工作線程數(shù)量的線程池。每當提交一個任務(wù)就創(chuàng)建一個工作線程,如果工作線程數(shù)量達到線程池初始的最大數(shù),則將提交的任務(wù)存入到池隊列中。

public static ExecutorService newFixedThreadPool(int nThreads)

nThreads - 池中的線程數(shù)

示例代碼:

public class ThreadPoolExecutorTest {
   public static void main(String[] args) {
    ExecutorService fixedThreadPool =Executors. newFixedThreadPool(3);
     for (int i =1; i<=5;i++){
       final int index=i ;
       fixedThreadPool.execute(new Runnable(){
         @Override
         public void run() {
           try {
            System.out.println("第" +index + "個線程" +Thread.currentThread().getName());
            Thread.sleep(1000);
          } catch(InterruptedException e ) {
             e .printStackTrace();
          }
        }

      });
    }
  }
}

由于設(shè)置最大線程數(shù)為3,所以在輸出三個數(shù)后等待2秒后才繼續(xù)輸出。

2. newScheduledThreadPool

創(chuàng)建一個線程池,它可安排在給定延遲后運行命令或者定期地執(zhí)行。

public static ScheduledExecutorService newScheduledThreadPool(int corePoolSize)

corePoolSize - 池中所保存的線程數(shù),即使線程是空閑的也包括在內(nèi)。

延遲執(zhí)行示例代碼:

public class ThreadPoolExecutorTest {  
  public static void main(String[] args) {
    ScheduledExecutorService scheduledThreadPool= Executors.newScheduledThreadPool(3);   
    scheduledThreadPool.schedule(newRunnable(){     
      @Override 
      public void run() {
       System.out.println("延遲三秒");
       }
   }, 3, TimeUnit.SECONDS);
  }
}

表示延遲3秒執(zhí)行。

定期執(zhí)行示例代碼:

public class ThreadPoolExecutorTest {  
  public static void main(String[] args) {

    ScheduledExecutorService scheduledThreadPool= Executors.newScheduledThreadPool(3);    
  scheduledThreadPool.scheduleAtFixedRate(newRunnable(){    
    @Override      
    public void run() {
       System.out.println("延遲1秒后每三秒執(zhí)行一次");
     }
   },1,3,TimeUnit.SECONDS);
 }

}

表示延遲1秒后每3秒執(zhí)行一次。

4.newSingleThreadExecutor

創(chuàng)建一個使用單個 worker 線程的 Executor,以無界隊列方式來運行該線程。(注意,如果因為在關(guān)閉前的執(zhí)行期間出現(xiàn)失敗而終止了此單個線程,那么如果需要,一個新線程將代替它執(zhí)行后續(xù)的任務(wù))??杀WC順序地執(zhí)行各個任務(wù),并且在任意給定的時間不會有多個線程是活動的。與其他等效的 newFixedThreadPool(1)不同,可保證無需重新配置此方法所返回的執(zhí)行程序即可使用其他的線程。

public static ExecutorService newSingleThreadExecutor()

示例代碼:

public class ThreadPoolExecutorTest {  
  public static void main(String[] args) {
    ExecutorService singleThreadPool= Executors.newSingleThreadExecutor();    
    for(int i=1;i<=5;i++){      
      int index=i;      
    singleThreadPool.execute(new Runnable(){
       @Override
       public void run() {         
        try{
         System.out.println("第"+index+"個線程");
        Thread.sleep(2000);
         }catch(InterruptedException e) {            
          e.printStackTrace();
        }
      } });
    }
  }
}

以上這篇詳談Java幾種線程池類型介紹及使用方法就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Kotlin 接口與 Java8 新特性接口詳解

    Kotlin 接口與 Java8 新特性接口詳解

    這篇文章主要介紹了Kotlin 接口與 Java8 新特性接口,Kotlin的接口是可以包含屬性聲明。Kotlin默認的聲明是fianl 和public的。 Kotlin里嵌套的類默認并不是內(nèi)部內(nèi),不包含對器外部類的隱式調(diào)用。下面我們來一起學習一下吧
    2019-06-06
  • MyBatis中TypeHandler的使用教程詳解

    MyBatis中TypeHandler的使用教程詳解

    在我們平常開發(fā)操作數(shù)據(jù)庫時,查詢、插入數(shù)據(jù)等操作行為,有時會報數(shù)據(jù)類型不匹配異常,就可以得知數(shù)據(jù)的類型是不唯一的必然是多種不同的數(shù)據(jù)類型,本文給大家介紹了MyBatis中TypeHandler的使用教程,需要的朋友可以參考下
    2024-12-12
  • 詳解springMVC容器加載源碼分析

    詳解springMVC容器加載源碼分析

    這篇文章主要介紹了詳解springMVC容器加載源碼分析,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • Java實現(xiàn)圖片倒影的源碼實例內(nèi)容

    Java實現(xiàn)圖片倒影的源碼實例內(nèi)容

    在本篇文章里小編給大家整理的是關(guān)于Java實現(xiàn)圖片倒影的源碼以及相關(guān)知識點,有需要的朋友們學習下。
    2019-09-09
  • Java多線程 實例解析

    Java多線程 實例解析

    這篇文章主要介紹了Java多線程 實例解析,需要的朋友可以參考下
    2017-04-04
  • 淺談Java中Map和Set之間的關(guān)系(及Map.Entry)

    淺談Java中Map和Set之間的關(guān)系(及Map.Entry)

    這篇文章主要介紹了淺談Java中Map和Set之間的關(guān)系(及Map.Entry),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • Springboot vue導(dǎo)出功能實現(xiàn)代碼

    Springboot vue導(dǎo)出功能實現(xiàn)代碼

    這篇文章主要介紹了Springboot vue導(dǎo)出功能實現(xiàn)代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-04-04
  • SpringBoot + WebSocket 實現(xiàn)答題對戰(zhàn)匹配機制案例詳解

    SpringBoot + WebSocket 實現(xiàn)答題對戰(zhàn)匹配機制案例詳解

    這篇文章主要介紹了SpringBoot + WebSocket 實現(xiàn)答題對戰(zhàn)匹配機制,分別為每個用戶擬定四種在線狀態(tài),通過流程圖給大家展示,需要的朋友可以參考下
    2021-05-05
  • Java swing仿酷狗音樂播放器

    Java swing仿酷狗音樂播放器

    這篇文章主要為大家詳細介紹了Java swing實現(xiàn)音樂播放器,Java開發(fā)圖形界面程序音樂播放器仿酷狗音樂播放器,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • java日期時間格式化@JsonFormat與@DateTimeFormat的使用

    java日期時間格式化@JsonFormat與@DateTimeFormat的使用

    本文主要介紹了java日期時間格式化@JsonFormat與@DateTimeFormat的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-08-08

最新評論

通化县| 大兴区| 尚义县| 增城市| 宿州市| 盖州市| 阿克苏市| 嘉义市| 昆山市| 永定县| 齐齐哈尔市| 北票市| 灵宝市| 辽宁省| 江孜县| 巨鹿县| 汝州市| 改则县| 南昌市| 图木舒克市| 娄烦县| 江华| 汾阳市| 察雅县| 山阴县| 浦县| 白沙| 宜州市| 微山县| 珲春市| 和平县| 增城市| 尚义县| 滦平县| 东兰县| 阳曲县| 合川市| 肃宁县| 项城市| 灵山县| 大新县|