import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
* 使用ExecutorService實現線程池
* ExecutorService是java提供的用於管理線程池的接口
* 線程池的作用:控制線程數量,重用線程
*
* 線程池的概念:首先創建一些線程,他們的集合稱爲線程池,當服務器接受到一個客戶請求後
* 就從線程池中取出一個空閒的線程爲之服務,服務完後不關閉該線程。而是將該線程還回到線程池中
* 在線程池的編程模式下,任務是提交給整個線程池,而不是交給某個線程,線程池在拿到任務後,他就在內部
* 找有無空閒線程,再把任務交給內部某個空閒線程。
* 一個線程同時只能執行一個任務,但是可以同一向一個線程池交多個任務
*
*
*
*/
public class ExecutorServiceDemo {
public static void main(String[] args) {
/**
* Executors.newFixedThreadPool(int nThreads)
* 創建一個可重用固定線程集合的線程池,以共享的無界隊列方式來運行這些線程
*/
ExecutorService threadPool=Executors.newFixedThreadPool(2);//新建線程池並初始化2個空線程
for(int i=0;i<5;i++) {//新建5個線程任務
Runnable r=new Runnable(){
public void run() {
Thread t=Thread.currentThread();
try {
System.out.println(t.getName()+":"+"正在運行任務..");
Thread.sleep(3000);
System.out.println(t.getName()+":"+"任務結束!");
} catch (InterruptedException e) {
// TODO Auto-generated catch block
System.out.println(t.getName()+":"+"線程中斷了");
}
}
};
//將任務指派給線程池
threadPool.execute(r);
System.out.println("指派了一個任務給線程池!");
}
// threadPool.shutdown();
threadPool.shutdownNow();
System.out.println("線程池結束了");
/**
* BlockingQueue是雙緩衝隊列
* 在多線程併發時,若需要使用隊列,我們可以使用Queue,但是要解決一個問題就是同步,但同步操作會降低併發對Queue操作的效率
* BlockingQueue內部使用兩條隊列,可允許兩個線程同時向隊列一個做存儲,一個做取出操作,在保證併發安全的同時提高了隊列的存取效率
*/
}
}
java-ExecutorService實現線程池
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.