一、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併發編程從入門到精通》張振華書籍