首頁 >Java >java教程 >Java執行緒池

Java執行緒池

PHPz
PHPz原創
2024-08-30 16:03:21972瀏覽

線程池,顧名思義,就是可以重複使用的線程的集合。這些線程之前已創建,並且當已經存在可用線程集合時,還可以提供開銷解決方案;這些可以重複使用並解決線程循環和等待線程完成其任務的問題。由於每當請求到達時線程就已經存在,因此它將消除線程創建的過程,從而節省時間並使處理速度更快。在本主題中,我們將學習 Java 線程池。

開始您的免費軟體開發課程

網頁開發、程式語言、軟體測試及其他

Java 執行緒池的工作

執行緒池中的所有執行緒都實作 java.util.concurrent 中的方法。有一個執行緒池,由Java執行緒池管理。查看此池的最簡單方法是使用的執行緒越多,每個執行緒執行實際工作所花費的時間就越少。這是一種有助於在可以使用多執行緒的應用程式中節省資源的方法。該 Java 執行緒為池維護一個佇列。

工作執行緒一直等待分配任務並執行它們。 Java中使用ThreadPoolExecutor來建立線程池。可運行執行緒的集合負責管理Java執行緒池中的執行緒。此後,工作執行緒出現並形成隊列。線程池監控這些隊列。

java.util.concurrent.Executors 幫助我們管理線程所需的工廠和支援方法。該類別還負責創建線程池。現在您的下一個問題可能是,這個執行者是什麼? Executor 提供了不同的類別,它們是實用程式類別的一部分。

執行緒池的技術工作可以被認為是一個擁有並發程式碼的池,它被分成可以並行運行的任務。然後它們被提交到池中執行。有任務提交者、執行者服務、任務佇列,最後還有執行緒池。此模式可以幫助您控制應用程式中存在的執行緒數。它決定其生命週期,安排任務,並將傳入的任務保留在工作佇列中。

Executorshelper 類別具有各種具有預先配置執行緒池實例的方法。 Executor 和 ExecutorService 介面有助於處理池中的不同實作。在實際實作之前,程式碼必須是解耦的格式。還有一個使用的介面。它是一個ThreadPoolExecutor。它是一個可擴展的線程池實現,可以指定許多參數,並且可以進行微調。可使用的參數包括核心池大小、最大池大小和保活時間。佇列只能成長到最大池大小。

Java 執行緒池範例

讓我們建立一個池並看看它是如何運作的。

代碼:

import java.util.Date;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
// The Job class will be executed in this case
class Job implements Runnable
{
private String name;
public Job(String s)
{
name = s;
}
// The task name will be populated first for the ones which were not running already, and the thread will sleep for 2s
//This entire method will be repeated 6 times
public void run()
{
try
{
for (int i = 0; i<=5; i++)
{
if (i==0)
{
Date d = new Date();
System.out.println("We are in "
+ " task name - "+ name);
//prints the task name every time the new task is started
}
else
{
System.out.println("The job "+
name +" is already running ");
// prints the job name which is already running
}
Thread.sleep(2000); // The thread is in sleep mode for 2 secs
}
System.out.println(name+" job is completes");
}
catch(InterruptedException e)
{
e.printStackTrace();
}
}
}
public class Test
{
// Here we define the maximum threads we have
static final int MAX_Threads= 5;
public static void main(String[] args)
{
Runnable run1 = new Job("task 1");
Runnable run2 = new Job("task 2");
Runnable run3 = new Job("task 3");
//A new thread pool is created with maximum number of threads
ExecutorService newpool = Executors.newFixedThreadPool(MAX_Threads);
newpool.execute(run1);
newpool.execute(run2);
newpool.execute(run3);
newpool.shutdown();
}
}

上面的程式碼涵蓋了執行緒建立直到關閉的每個步驟。固定和創建的最大線程限制。完成此操作後,將建立三個作業並一一執行。每個作業也分配有 2 秒的睡眠時間。由於線程池已建立並且所有作業同時工作,我們可以看到整個過程將運行 6 次。當 if 語句在執行緒池中執行時,它會檢查作業是否已經在執行。如果作業尚未開始執行,它將執行 if 區塊。如果它已經在運行,那麼 else 區塊將被運行。它將顯示作業名稱並表示它已經在運行。建立執行緒池,然後執行所有 3 個作業。作業運行後,我們關閉已建立的執行緒池。

下面是給定程式的輸出。

輸出:

Java執行緒池

它會運行直到所有任務完成。

線程池的優點和缺點

Java 中的執行緒池有幾個優點。僅舉幾例,以下是主要優點:

  • 它可以提高 CPU 和程式的效能。
  • 由於不同的執行緒正在處理所有進程,因此節省了時間。
  • 執行緒池的主要優點是重複使用已經存在的執行緒。無需一次又一次創建新線程。
  • 它提供即時訪問,這有助​​於處理即時數據。

不過,線程池也有一些缺點。以下是缺點:

  • 您無法設定任務的優先級,並且無法追蹤這些任務。
  • 使用多了,可以自動刪除。

結論

因此,線程池是處理我們手頭上的多個任務的有效方法。 Java 為我們提供了重複使用執行緒和利用現有資源的便利性。

以上是Java執行緒池的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn