線程池的作用:
線程池作用就是限制系統中執行線程的數量。
根據系統的環境情況,可以自動或手動設置線程數量,達到運行的最佳效果;少了浪費了系統資源,多了造成系統擁擠效率不高。用線程池控制線程數量,其他線程排隊等候。一個任務執行完畢,再從隊列的中取最前面的任務開始執行。若隊列中沒有等待進程,線程池的這一資源處於等待。當一個新任務需要運行時,如果線程池中有等待的工作線程,就可以開始運行了;否則進入等待隊列。
爲什麼要用線程池:
- 減少了創建和銷燬線程的次數,每個工作線程都可以被重複利用,可執行多個任務
- 可以根據系統的承受能力,調整線程池中工作線線程的數目,防止因爲因爲消耗過多的內存,而把服務器累趴下(每個線程需要大約1MB內存,線程開的越多,消耗的內存也就越大,最後死機)
線程池類
import java.util.Random;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class ThreadTest {
private static ExecutorService executor = Executors.newFixedThreadPool(5);
private static Task task;
public static void main(String[] args) {
ThreadTest test=new ThreadTest();
int ThreadNum=0;
while(true){
ThreadNum++;
test.start(ThreadNum);
}
}
private void start(final int ThreadNum)
{
task = new Task(ThreadNum);
executor.execute(task);
}
}
class Task extends Thread
{
private int ThreadNum;
Task(int temp)
{
ThreadNum=temp;
}
public void run() {
System.out.println("當前執行了:"+ThreadNum);
try {
Random random=new Random();
int sleep=random.nextInt(8)+2;
System.out.println(ThreadNum+">>停止"+sleep+"秒");
Thread.sleep(sleep*1000);
} catch (InterruptedException e) {
System.out.println("執行過程中出現縣城暫停異常"+e);
}
System.out.println(ThreadNum+">>執行完成");
System.gc();
}
}
執行結果如下:
當前執行了:2 當前執行了:3 當前執行了:1 2>>停止4秒 3>>停止8秒 1>>停止4秒 當前執行了:4 當前執行了:5 5>>停止3秒 4>>停止4秒 5>>執行完成 1>>執行完成 2>>執行完成 當前執行了:6 6>>停止9秒 當前執行了:8 8>>停止6秒 4>>執行完成 當前執行了:7 7>>停止7秒 當前執行了:9 9>>停止9秒
-----------------------------------程序員 閆帆原創---------------------------------------
轉載請註明原創人信息 程序員 閆帆yanfanvip