歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

使用Java線程池執行任務

下面介紹一下使用ThreadPoolExecutor線程執行者來運行多線程任務。它將線程創建與任務運行分離開來。

package test;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;

public class ThreadExecuteExample {
 public static void main(String[] args) {
  ExecutorService  service = Executors.newFixedThreadPool(2);
  for (int i = 0; i < 10; i++) {
   service.execute(new Runnable() {
   
    @Override
    public void run() {
     try {
      Thread.sleep(1 * 1000);
     } catch (InterruptedException e) {
      e.printStackTrace();
     }
    }
   });
  }
  service.shutdown();
  try {
   service.awaitTermination(Integer.MAX_VALUE, TimeUnit.DAYS);
  } catch (InterruptedException e) {
   e.printStackTrace();
  }
 }
}

ExecutorService  service = Executors.newFixedThreadPool(2);

通過Executors創建了一個擁有兩個線程的ExecutorService對象。

for (int i = 0; i < 10; i++) {
   service.execute(new Runnable() {
   
    @Override
    public void run() {
     try {
      Thread.sleep(1 * 1000);
     } catch (InterruptedException e) {
      e.printStackTrace();
     }
    }
   });
  }

往ExecutorService中提交了10個runnable對象的實例。ExecutorService會使用內部的2個線程來逐個運行這10個runnable對象。

service.shutdown();

關閉執行者。因為ExecutorService利用了它內部的初始化好的線程去執行提交的多個runnable任務,所以這些線程被反復利用而不會消亡。如果不顯示的調用shutdown()方法的話,ExecutorService內部的線程一直會存活下去,這樣即使任務完成了,虛擬機也不會退出。調用shutdown()後就會通知ExecutorService運行完任務後銷毀所有的線程。

shutdown是一個非阻塞的方法。

service.awaitTermination(Integer.MAX_VALUE, TimeUnit.DAYS);

在指定的時間內阻塞等待ExecutorService任務的完成。

Java中介者設計模式 http://www.linuxidc.com/Linux/2014-07/104319.htm

Java 設計模式之模板方法開發中應用 http://www.linuxidc.com/Linux/2014-07/104318.htm

設計模式之 Java 中的單例模式(Singleton) http://www.linuxidc.com/Linux/2014-06/103542.htm

Java對象序列化 http://www.linuxidc.com/Linux/2014-10/107584.htm

大話設計模式(帶目錄完整版) PDF+源代碼 http://www.linuxidc.com/Linux/2014-08/105152.htm

Copyright © Linux教程網 All Rights Reserved