線程池常用類學習筆記

一、newSingleThreadExecutor (單線程的線程池)

ExecutorService executor = Executors.newSingleThreadExecutor();

通過上面的創建語句,即可創建好一個線程池,但是該線程池只支持裝載一個線程,也就是說每次只有一個線程在運行。

向線程池中添加線程實例: 

 public static void main(String[] args) {
 

//1、創建單線程的線程池
  ExecutorService executor =Executors.newSingleThreadExecutor();

//2、創建10個線程
  for (int i = 0; i < 10; i++) {
   final int no =i;
   Runnable runnable = new Runnable(){
    public void run() {
     try {
      System.out.println("into : "+ no);
      Thread.sleep(1000L);
      System.out.println(" end : "+ no);
     } catch (InterruptedException e) {
      e.printStackTrace();
     }
    }
   };

//3、向線程池中裝載線程
   executor.execute(runnable);
  }
  executor.shutdown();
  System.out.println(" Thread Main end!");

 }


二、newCachedThreadPool (具有緩存功能的線程池)

創建線程池:

ExecutorService executor = Executors.newCachedThreadPool();

使用緩存線程池的方式跟上面的類似。


三、newFixedThreadPool (創建固定線程數的線程池)

顧名思義就是可以指定線程數量的線程池,如果線程池只能接收5個線程同時運行,那當添加到第6個線程時,第6個線程將會處理等待狀態且不會被執行。

只有當線程池裏有一個線程執行結束纔會執行第6個線程,其他線程以此類推。

該線程池的特點就是可以指定同時運行的線程數量,對於線程池大小以外的線程則處理等待狀態,也就是處於排隊的狀態。

看下面的實例:

 public static void main(String[] args) {
  

//創建容納5個線程的線程池
  ExecutorService executor = Executors.newFixedThreadPool(5);

//創建200個測試線程
  for (int i = 0; i < 200; i++) {
   final int no =i;
   Runnable runnable = new Runnable(){
    public void run() {
     try {
      System.out.println("into : "+ no);
      Thread.sleep(1000);
      System.out.println("end : " +no);
     } catch (InterruptedException e) {
      e.printStackTrace();
     }
    }
   };
   //加載線程到線程池
   executor.execute(runnable);
  }
  executor.shutdown();
  System.out.println("main thread end!");

 }



注:以上例子摘自《JAVA併發編程從入門到精通》張振華書籍


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章