線程池的理解及使用

1.初識線程池:
  根據系統自身的環境狀況,有效的限制執行線程的數量,使得運行效果達到最佳。線程主要是經過控制執行的線程的數量,超出數量的線程排隊等候,等待有任務執行完畢,再從隊列最前面取出任務執行。
2.線程池做用:
  減小建立和銷燬線程的次數,每一個工做線程能夠屢次使用
  可根據系統狀況調整執行的線程數量,防止消耗過多內存
3.常見線程池:
①newSingleThreadExecutor
  單個線程的線程池,即線程池中每次只有一個線程工做,單線程串行執行任務
②newFixedThreadExecutor(n)
  固定數量的線程池,沒提交一個任務就是一個線程,直到達到線程池的最大數量,而後後面進入等待隊列直到前面的任務完成才繼續執行
③newCacheThreadExecutor(推薦使用)
  可緩存線程池,當線程池大小超過了處理任務所需的線程,那麼就會回收部分空閒(通常是60秒無執行)的線程,當有任務來時,又智能的添加新線程來執行。
④newScheduleThreadExecutor
  大小無限制的線程池,支持定時和週期性的執行線程
 
 
4.實例:
publicclassMyThread extends Thread {
    @Override
    publicvoid run() {
        System.out.println(Thread.currentThread().getName() + "執行中。。。");
    }
}

①newSingleThreadExecutor

publicclassTestSingleThreadExecutor {
    publicstaticvoid main(String[] args) {
        //建立一個可重用固定線程數的線程池
        ExecutorService pool = Executors. newSingleThreadExecutor();
        //建立實現了Runnable接口對象
        Thread tt1 = new MyThread();
        Thread tt2 = new MyThread();
        Thread tt3 = new MyThread();
        Thread tt4 = new MyThread();
        Thread tt5 = new MyThread();
        //將線程放入池中並執行
        pool.execute(tt1);
        pool.execute(tt2);
        pool.execute(tt3);
        pool.execute(tt4);
        pool.execute(tt5);
        //關閉
        pool.shutdown();
    }
}
result:
pool-1-thread-1執行中。。。
pool-1-thread-1執行中。。。
pool-1-thread-1執行中。。。
pool-1-thread-1執行中。。。
pool-1-thread-1執行中。。。

②newFixedThreadExecutor(n)

publicclass TestFixedThreadPool {
    publicstaticvoid main(String[] args) {
        //建立一個可重用固定線程數的線程池
        ExecutorService pool = Executors.newFixedThreadPool(2);
        //建立實現了Runnable接口對象
        Thread t1 = new MyThread();
        Thread t2 = new MyThread();
        Thread t3 = new MyThread();
        Thread t4 = new MyThread();
        Thread t5 = new MyThread();
        //將線程放入池中進行執行
        pool.execute(t1);
        pool.execute(t2);
        pool.execute(t3);
        pool.execute(t4);
        pool.execute(t5);
        //關閉線程池
        pool.shutdown();
    }
}
result:
pool-1-thread-1執行中。。。
pool-1-thread-2執行中。。。
pool-1-thread-1執行中。。。
pool-1-thread-2執行中。。。
pool-1-thread-1執行中。。。

③newCacheThreadExecutor

publicclass TestCachedThreadPool {
    publicstaticvoid main(String[] args) {
        //建立一個可重用固定線程數的線程池
        ExecutorService pool = Executors.newCachedThreadPool();
        //建立實現了Runnable接口對象
        Thread t1 = new MyThread();
        Thread t2 = new MyThread();
        Thread t3 = new MyThread();
        Thread t4 = new MyThread();
        Thread t5 = new MyThread();
        //將線程放入池中進行執行
        pool.execute(t1);
        pool.execute(t2);
        pool.execute(t3);
        pool.execute(t4);
        pool.execute(t5);
        //關閉線程池
        pool.shutdown();
    }
}
result:
pool-1-thread-1執行中。。。
pool-1-thread-2執行中。。。
pool-1-thread-4執行中。。。
pool-1-thread-3執行中。。。
pool-1-thread-5執行中。。。
相關文章
相關標籤/搜索