java-ExecutorService實現線程池


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內部使用兩條隊列,可允許兩個線程同時向隊列一個做存儲,一個做取出操作,在保證併發安全的同時提高了隊列的存取效率
         */

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