Java四種線程池的使用

FixedThreadPool

由Executors的newFixedThreadPool方法建立。它是一種線程數量固定的線程池,當線程處於空閒狀態時,他們並不會被回收,除非線程池被關閉。當全部的線程都處於活動狀態時,新的任務都會處於等待狀態,直到有線程空閒出來。FixedThreadPool只有核心線程,且該核心線程都不會被回收,這意味着它能夠更快地響應外界的請求。
FixedThreadPool沒有額外線程,只存在覈心線程,並且核心線程沒有超時機制,並且任務隊列沒有長度的限制。ide

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方法建立,不存在覈心線程,只存在數量不定的非核心線程,並且其數量最大值爲Integer.MAX_VALUE。當線程池中的線程都處於活動時(全滿),線程池會建立新的線程來處理新的任務,不然就會利用新的線程來處理新的任務,線程池中的空閒線程都有超時機制,默認超時時長爲60s,超過60s的空閒線程就會被回收。和FixedThreadPool不一樣的是,CachedThreadPool的任務隊列其實至關於一個空的集合,這將致使任何任務都會被執行,由於在這種場景下SynchronousQueue是不能插入任務的,SynchronousQueue是一個特殊的隊列,在不少狀況下能夠理解爲一個沒法儲存元素的隊列。從CachedThreadPool的特性看,這類線程比較適合執行大量耗時較小的任務。當整個線程池都處於閒置狀態時,線程池中的線程都會由於超時而被中止回收,幾乎是不佔任何系統資源。線程

ScheduledThreadPool

經過Executors的newScheduledThreadPool方式建立,核心線程數量是固定的,而非核心線程是沒有限制的,而且當非核心線程閒置時它會被當即回收,ScheduledThreadPool這類線程池主要用於執行定時任務和具備固定時期的重複任務。
延遲:code

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秒後每三秒執行一次");
     }
   },1,3,TimeUnit.SECONDS);
 }
 
}

SingleThreadExecutor

經過Executors的newSingleThreadExecutor方法來建立。這類線程池內部只有一個核心線程,它確保全部的任務都在同一個線程中按順序執行。SingleThreadExecutor的意義在於統一全部外界任務一個線程中,這使得這些任務之間不須要處理線程同步的問題資源

相關文章
相關標籤/搜索