各位小夥伴們大家好,這次小編要簡單介紹一下Java中的線程池。在之前小編介紹線程的時候,如果我們使用線程的時候,就可以去創建一個線程,那樣實現起來就非常簡單,但是如果並發地線程數量很多,並且每一個線程都是執行一個時間很短的任務就結束了,這樣頻繁創建線程就會大大降低系統的效率,頻繁創建和銷毀線程需要時間。
通過使用線程池,可以使線程復用,就是執行完一個任務,不銷毀,繼續執行其他任務。
其實線程池就相當於一個容器(集合),裡面有很多線程。當程序第一次啟用的時候,創建多個線程,保存到一個集合中,當我們使用線程的時候,就可以從容器中取出線程使用,如:
Thread t=list.remove(0);remove返回的是被移除的元素(線程只能被一個任務使用)
Thread t=linked.removeFirst();
當使用完畢線程,需要把線程歸還給線程池
list.add(t);
linked.addLast(t);
其實線程池就是一個容納多線程的容器,其中線程可以反覆使用,省去了創建線程對象的操作,無需反覆創建線程而消耗過多資源。就像上面這張圖中,線程1執行任務1,線程2執行任務2......但任務4沒有對應的線程,這時候我們沒有必要創建新的線程,只需要等待其它任務執行完,將線程歸還到線程池中然後調用線程就可以了。
這樣的話,可以降低資源消耗,減少了創建和銷毀線程的次數,每一個線程都可以被重複利用。也可以提高響應速度,當任務到達時,任務不需要等到新線程創建就能立即執行。
現在小編來說說線程池的代碼實現:
首先,java.util.concurrent.Executors:線程池的工廠類,用來生成線程池
其次,Executors類中的靜態方法:
static ExecutorService newFixedThreadPool(int nThreads)創建一個可重用固定線程數的線程池
參數:
int nThreads:創建線程池中包含的線程數量
返回值:
ExecutorService接口,返回的是ExecutorService接口的實現類對象,我們可以使用ExecutorService接口接收(面向接口編程)
java.util.concurrent.ExecutorService:線程池接口,用來從線程池中獲取線程,調用start方法,執行線程任務。
submit(Runnable task)提交一個Runnable任務用於執行
關閉/銷毀線程池方法
void shutdown()
線程池的使用步驟:
使用線程池的工廠類Executors裡面提供的靜態方法newFixedThreadPool生產一個指定線程數量的線程池。創建一個類,實現Runnable接口,重寫run方法,設置線程任務。調用ExecutorService中的方法submit,傳遞線程任務,開啟線程,執行run方法。調用ExecutorService中的方法shutdown銷毀線程池(不建議執行)。代碼如下:
//2.創建一個類,實現Runnable接口,重寫run方法,設置線程任務
public classRunnableImp1 implements Runnable {
public void run() {
System.out.println(Thread.currentThread().getName()+"創建了一個新的線程,執行");
}
}
創建Demo01ThreadPool類
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class Demo01ThreadPool {
public static void main(String args[]) {
/*1.使用線程池的工廠類Executors裡面提供的靜態方法newFixedThreadPool生產一個指定線程數量的線程池。*/
ExecutorService es=Executors.newFixedThreadPool(2);//線程池數量為2
//3.調用ExecutorService中的方法submit,傳遞線程任務,開啟線程,執行run方法。
es.submit(new RunnableImp1());
es.submit(new RunnableImp1());
es.submit(new RunnableImp1());
//4.調用ExecutorService中的方法shutdown銷毀線程池(不建議執行)
es.shutdown();//使用後會把線程池銷毀,就無法執行新的線程了。
}
}
關於線程池的原理,還有線程池代碼的創建,小編就先說到這裡,希望這篇文章可以幫到大家,也歡迎各位小夥伴補充和糾錯。
圖片來自網絡,如有侵權,請聯繫作者刪除