欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java中四種線程池的使用示例詳解

 更新時間:2017年08月16日 10:57:07   作者:andy_hu  
這篇文章主要給大家介紹了關(guān)于Java中四種線程池的使用方法,四種線程池分別包括FixedThreadPool、CachedThreadPool、ScheduledThreadPool以及SingleThreadExecutor,文中給出了詳細(xì)的示例代碼供大家參考,需要的朋友們下面來一起看看吧。

在什么情況下使用線程池?

1.單個任務(wù)處理的時間比較短

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

使用線程池的好處:

1.減少在創(chuàng)建和銷毀線程上所花的時間以及系統(tǒng)資源的開銷

2.如不使用線程池,有可能造成系統(tǒng)創(chuàng)建大量線程而導(dǎo)致消耗完系統(tǒng)內(nèi)存以及”過度切換”。

本文詳細(xì)的給大家介紹了關(guān)于Java中四種線程池的使用,分享出來供大家參考學(xué)習(xí),下面話不多說了,來一起看看詳細(xì)的介紹:

FixedThreadPool

由Executors的newFixedThreadPool方法創(chuàng)建。它是一種線程數(shù)量固定的線程池,當(dāng)線程處于空閑狀態(tài)時,他們并不會被回收,除非線程池被關(guān)閉。當(dāng)所有的線程都處于活動狀態(tài)時,新的任務(wù)都會處于等待狀態(tài),直到有線程空閑出來。FixedThreadPool只有核心線程,且該核心線程都不會被回收,這意味著它可以更快地響應(yīng)外界的請求。

FixedThreadPool沒有額外線程,只存在核心線程,而且核心線程沒有超時機(jī)制,而且任務(wù)隊列沒有長度的限制。

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();
   }
  }
 
  });
 }
 }
}

CachedThreadPool

由Executors的newCachedThreadPool方法創(chuàng)建,不存在核心線程,只存在數(shù)量不定的非核心線程,而且其數(shù)量最大值為Integer.MAX_VALUE。當(dāng)線程池中的線程都處于活動時(全滿),線程池會創(chuàng)建新的線程來處理新的任務(wù),否則就會利用新的線程來處理新的任務(wù),線程池中的空閑線程都有超時機(jī)制,默認(rèn)超時時長為60s,超過60s的空閑線程就會被回收。和FixedThreadPool不同的是,CachedThreadPool的任務(wù)隊列其實相當(dāng)于一個空的集合,這將導(dǎo)致任何任務(wù)都會被執(zhí)行,因為在這種場景下SynchronousQueue是不能插入任務(wù)的,SynchronousQueue是一個特殊的隊列,在很多情況下可以理解為一個無法儲存元素的隊列。從CachedThreadPool的特性看,這類線程比較適合執(zhí)行大量耗時較小的任務(wù)。當(dāng)整個線程池都處于閑置狀態(tài)時,線程池中的線程都會因為超時而被停止回收,幾乎是不占任何系統(tǒng)資源。

ScheduledThreadPool

通過Executors的newScheduledThreadPool方式創(chuàng)建,核心線程數(shù)量是固定的,而非核心線程是沒有限制的,并且當(dāng)非核心線程閑置時它會被立即回收,ScheduledThreadPool這類線程池主要用于執(zhí)行定時任務(wù)和具有固定時期的重復(fù)任務(wù)。
延遲:

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);
 }
}

定時:

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);
 }
 
}

SingleThreadExecutor

通過Executors的newSingleThreadExecutor方法來創(chuàng)建。這類線程池內(nèi)部只有一個核心線程,它確保所有的任務(wù)都在同一個線程中按順序執(zhí)行。SingleThreadExecutor的意義在于統(tǒng)一所有外界任務(wù)一個線程中,這使得這些任務(wù)之間不需要處理線程同步的問題

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

  • 如何測試Java類的線程安全性

    如何測試Java類的線程安全性

    這篇文章主要介紹了如何測試Java類的線程安全性,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-12-12
  • 關(guān)于Java中的可見性和有序性問題

    關(guān)于Java中的可見性和有序性問題

    這篇文章主要介紹了關(guān)于Java中的可見性和有序性問題,Java在誕生之初就支持多線程,自然也有針對這三者的技術(shù)方案,今天就學(xué)習(xí)一下Java如何解決其中的可見性和有序性導(dǎo)致的問題,需要的朋友可以參考下
    2023-08-08
  • Java中字符串拼接的一些細(xì)節(jié)分析

    Java中字符串拼接的一些細(xì)節(jié)分析

    這篇文章主要介紹了Java中字符串拼接的一些細(xì)節(jié)分析,本文著重剖析了字符串拼接的一些性能問題、技巧等內(nèi)容,需要的朋友可以參考下
    2015-01-01
  • Java解壓RAR文件的三種方式

    Java解壓RAR文件的三種方式

    這篇文章主要給大家介紹了關(guān)于Java解壓RAR文件的三種方式,Java自身并不支持解壓RAR文件,需要使用第三方庫來實現(xiàn),文中給出了詳細(xì)的示例代碼,需要的朋友可以參考下
    2023-07-07
  • 5個主流的Java開源IDE工具詳解

    5個主流的Java開源IDE工具詳解

    這篇文章主要介紹了5個主流的Java開源IDE工具,無論如何,Java在當(dāng)今使用的編程語言中始終排在前三名,在TIOBE索引中涉及700萬到1000萬的程序員和開發(fā)者
    2020-07-07
  • Java設(shè)計模式之單件模式深入講解

    Java設(shè)計模式之單件模式深入講解

    有人說單件模式是最簡單的模式,因為它只有一個類,但其實它還有一些值得注意的地方,就如:出現(xiàn)并發(fā)性時,單件可能已經(jīng)不是單件了
    2021-11-11
  • Java如何獲取Cookie和Session

    Java如何獲取Cookie和Session

    Cookie?和?Session之間主要是通過?SessionId?關(guān)聯(lián)起來的,?SessionId是?Cookie?和?Session?之間的橋梁,這篇文章主要介紹了Java獲取Cookie和Session的方法,需要的朋友可以參考下
    2024-01-01
  • Java表數(shù)據(jù)導(dǎo)出到Excel中的實現(xiàn)

    Java表數(shù)據(jù)導(dǎo)出到Excel中的實現(xiàn)

    這篇文章主要介紹了Java表數(shù)據(jù)導(dǎo)出到Excel中的實現(xiàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • Java實現(xiàn)字符串倒序輸出的常用方法小結(jié)

    Java實現(xiàn)字符串倒序輸出的常用方法小結(jié)

    這篇文章主要介紹了Java實現(xiàn)字符串倒序輸出的常用方法,通過三個實例從不同角度實現(xiàn)該功能,有不錯的借鑒價值,需要的朋友可以參考下
    2014-09-09
  • 詳解Java中字典樹(Trie樹)的圖解與實現(xiàn)

    詳解Java中字典樹(Trie樹)的圖解與實現(xiàn)

    Trie又稱為前綴樹或字典樹,是一種有序樹,它是一種專門用來處理串匹配的數(shù)據(jù)結(jié)構(gòu)。本文將利用圖解詳細(xì)講解Trie樹的實現(xiàn),需要的可以參考一下
    2022-05-05

最新評論