更新時間:2023-04-14 來源:黑馬程序員 瀏覽量:
IT就到黑馬程序員.gif)
線程池中的線程是在線程池啟動時就創(chuàng)建好的,而不是在任務(wù)到來時才動態(tài)地創(chuàng)建線程。
線程池中的線程創(chuàng)建過程通常包括以下步驟:
1.初始化線程池參數(shù),例如線程池大小、核心線程數(shù)、最大線程數(shù)、等待隊列大小等。
2.創(chuàng)建線程池中的核心線程。核心線程在線程池中始終存在,除非線程池被關(guān)閉。
3.創(chuàng)建等待隊列。等待隊列是一個用于存儲任務(wù)的緩沖區(qū)域,當(dāng)線程池中的線程都在忙碌處理任務(wù)時,新到來的任務(wù)將會被放入等待隊列中等待處理。
4.如果當(dāng)前任務(wù)數(shù)量超過了核心線程數(shù),那么線程池會創(chuàng)建新的線程來處理任務(wù),直到線程數(shù)達(dá)到最大線程數(shù)。
5.如果等待隊列已滿,且線程數(shù)已達(dá)到最大線程數(shù),那么線程池會根據(jù)定義的拒絕策略來拒絕新的任務(wù)。
下面是一個簡單的示例代碼,展示了如何在Java中創(chuàng)建一個固定大小的線程池,線程池中的線程在初始化時就會被創(chuàng)建:
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class ThreadPoolExample {
public static void main(String[] args) {
// 創(chuàng)建一個固定大小的線程池,大小為3
ExecutorService executor = Executors.newFixedThreadPool(3);
// 提交10個任務(wù)給線程池執(zhí)行
for (int i = 1; i <= 10; i++) {
executor.execute(new Task(i));
}
// 關(guān)閉線程池
executor.shutdown();
}
static class Task implements Runnable {
private int taskId;
public Task(int taskId) {
this.taskId = taskId;
}
public void run() {
System.out.println("Task #" + taskId + " is being executed by " + Thread.currentThread().getName());
}
}
}在上面的示例中,我們創(chuàng)建了一個固定大小的線程池,并提交了10個任務(wù)給線程池執(zhí)行。在每個任務(wù)執(zhí)行時,都會輸出當(dāng)前任務(wù)的編號以及執(zhí)行任務(wù)的線程的名稱??梢钥吹?,每個任務(wù)都是由線程池中的一個線程來執(zhí)行的,而不是每次都創(chuàng)建一個新的線程。
總之,線程池中的線程是在啟動時創(chuàng)建好的,并且會一直存在直到線程池被關(guān)閉。線程池的好處在于它可以重復(fù)使用已有的線程,避免了頻繁地創(chuàng)建和銷毀線程所帶來的開銷和資源浪費。
取課程.jpg)
1024首播|39歲程序員逆襲記:不被年齡定義,AI浪潮里再迎春天
2025-10-241024程序員節(jié)丨10年同行,致敬用代碼改變世界的你
2025-10-24【AI設(shè)計】北京143期畢業(yè)僅36天,全員拿下高薪offer!黑馬AI設(shè)計連續(xù)6期100%高薪就業(yè)
2025-09-19【跨境電商運營】深圳跨境電商運營畢業(yè)22個工作日,就業(yè)率91%+,最高薪資達(dá)13500元
2025-09-19【AI運維】鄭州運維1期就業(yè)班,畢業(yè)14個工作日,班級93%同學(xué)已拿到Offer, 一線均薪資 1W+
2025-09-19【AI鴻蒙開發(fā)】上海校區(qū)AI鴻蒙開發(fā)4期5期,距離畢業(yè)21天,就業(yè)率91%,平均薪資14046元
2025-09-19