国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁 Java java教程 Java中Executor服務(wù)概述

Java中Executor服務(wù)概述

Jan 05, 2025 am 06:44 AM

Overview of Executor Service in Java

Executor 和 ExecutorService API 是管理和控制執(zhí)行緒執(zhí)行的重要工具。它們是 java.util.concurrent 套件的一部分。它們透過抽象線程創(chuàng)建、管理和同步的複雜性來簡化並發(fā)編程的過程。

Executors 是 java.util.concurrent 套件中的實用工具類,提供用於建立和管理不同類型的 ExecutorService 實例的工廠方法。它簡化了建立執(zhí)行緒池的過程,讓我們可以輕鬆地建立和管理不同配置的執(zhí)行器實例。

Executor API 它是從 Java 1.5 開始提供的介面。它提供了execute(Runnable command)方法。 這是基本接口,ExecutorService 擴展了該接口。給定的命令將在將來由新線程或線程池中的線程或同一線程執(zhí)行,並且不會返回 void。

ExecutorService API 它是從 Java 1.5 開始提供的介面。它提供了多種方法來控制並發(fā)程式設(shè)計中任務(wù)的執(zhí)行。它支援可運行和可調(diào)用任務(wù)。它傳回任務(wù)狀態(tài)的 Future。以下是最常用的方法。

  • submit() 接受 Callable 或 Runnable 任務(wù)並傳回 Future 型態(tài)結(jié)果。

  • invokeAny() 接受一組要執(zhí)行的任務(wù),並傳回任何一個任務(wù)成功執(zhí)行的結(jié)果。

  • invokeAll() 接受要執(zhí)行的任務(wù)集合,並以 Future 物件類型清單的形式傳回所有任務(wù)的結(jié)果。

  • shutdown() 不會立即停止執(zhí)行器服務(wù),但不接受新任務(wù)。一旦所有目前正在運行的任務(wù)完成,它就會關(guān)閉執(zhí)行器服務(wù)。

  • shutdownNow() 會嘗試立即停止執(zhí)行器服務(wù),但不保證所有正在執(zhí)行的任務(wù)會同時停止。

  • awaitTermination(long timeout, TimeUnit unit) 阻塞/等待,直到所有任務(wù)完成或發(fā)生超時或當(dāng)前線程被中斷,以先發(fā)生者為準(zhǔn)。當(dāng)前線程將被阻塞。

ExecutorService 的類型

  • FixThreadPool 它會建立具有指定執(zhí)行緒數(shù)的固定大小執(zhí)行緒池。提交的任務(wù)是並發(fā)執(zhí)行的。如果沒有任務(wù),則執(zhí)行緒將處於空閒狀態(tài),直到任務(wù)到達。如果線程繁忙,任務(wù)將被加入到佇列中。
ExecutorService fixedThreadPool = Executors.newScheduledThreadPool(5);
Future<String> submit = fixedThreadPool.submit(() -> {
    System.out.println("Task executed by " + Thread.currentThread().getName());
    return Thread.currentThread().getName();
});
fixedThreadPool.shutdown();
  • CachedThreadPool 建立執(zhí)行緒池並根據(jù)工作負載自動調(diào)整池中所需的執(zhí)行緒數(shù)。如果執(zhí)行緒空閒超過60秒,就會被終止。這對於動態(tài)負載非常有效。由於線程將在空閒超時後被殺死,因此這裡可以更好地利用資源。
ExecutorService fixedThreadPool = Executors.newCachedThreadPool();
Future<String> submit = fixedThreadPool.submit(() -> {
    System.out.println("Task executed by " + Thread.currentThread().getName());
    return Thread.currentThread().getName();
});
fixedThreadPool.shutdown();
  • SingleThreadExecutor 建立單線程,任務(wù)依序執(zhí)行。這裡沒有並行處理。
ExecutorService fixedThreadPool = Executors.newSingleThreadExecutor();
Future<String> submit = fixedThreadPool.submit(() -> {
    System.out.println("Task executed by " + Thread.currentThread().getName());
    return Thread.currentThread().getName();
});
fixedThreadPool.shutdown()
  • ScheduledThreadPool/ScheduledExecutor 它會建立一個線程或 trhead 池,能夠定期運行任務(wù)或在一定延遲後運行。
ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor(); // Single-threaded scheduler
ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(5); // Multi-threaded scheduler
scheduler.schedule(task, 10, TimeUnit.SECONDS); // Schedule task to run after 10 seconds.

scheduler.scheduleAtFixedRate(task, 5, 10, TimeUnit.SECONDS);
    //It schedules a task to run every 10 seconds with an initial delay of 5 seconds.
scheduler.scheduleWithFixedDelay(task, 5, 10, TimeUnit.SECONDS);
   //It schedules a task to run with a fixed delay of 10 seconds between the end of one execution and the start of the next, with an initial delay of 5 seconds.
scheduler.schedule(() -> scheduler.shutdown(), 20, TimeUnit.SECONDS);
   //It schedules a shutdown of the scheduler after 20 seconds to stop the example.

向 ExecutorService 提交任務(wù)
可以使用execute() 和submit() 方法將任務(wù)提交給ExecutorService。 execute()方法用於Runnable任務(wù),而submit()可以處理Runnable和Callable任務(wù)。 ”

 executor.execute(new RunnableTask()); //fire-and-forgot
 executor.submit(new CallableTask()); //returns the status of task

關(guān)閉 ExecutorService
關(guān)閉 ExecutorService 以釋放資源非常重要。您可以使用 shutdown() 和 shutdownNow() 方法來執(zhí)行此操作。

executor.shutdown(); // Initiates an orderly shutdown"
executor.shutdownNow(); // Attempts to stop all actively executing tasks.
executor.awaitTermination(long timeout, TimeUnit unit); //blocks the thread until all tasks are completed or timeout occurs or current thread is interrupted, whichever happens first. Returns `true `is tasks completed, otherwise `false`.

建議的關(guān)閉方法

executor.shutdown();
try {
    // Wait for tasks to complete or timeout
    if (!executor.awaitTermination(120, TimeUnit.SECONDS)) {
        // If the timeout occurs, force shutdown
        executor.shutdownNow();      
    }
} catch (InterruptedException ex) {
    executor.shutdownNow();
    Thread.currentThread().interrupt();
}

關(guān)於 Runnable

  • Runnable 是一個接口,代表一個可以透過執(zhí)行緒運行的任務(wù)。
  • 我們可以使用Threads或Executor服務(wù)來執(zhí)行Runnable任務(wù)。
  • Runnable 有 run() 方法,且不傳回任何資料。
  • 我們不能拋出已檢查的異常。

關(guān)於 Callable

  • 1.5中引入
  • 它有 call() 方法並傳回型別 V。
  • 它包含 throws Exception 的意思,我們可以拋出檢查異常。

關(guān)於未來

  • 它代表任何任務(wù)的未來結(jié)果。
  • 請求處理完成後,結(jié)果最終會在Future中出現(xiàn)。
  • boolean isDone() 傳回請求處理的狀態(tài)。如果完成則為 true,否則為 false。
  • boolean cancel(boolean mayInterruptIfRunning) 取消提交的任務(wù)。如果我們將 mayInterruptIfRunning 傳遞為 false,那麼它不會取消已經(jīng)啟動的任務(wù)。
  • boolean isCancelled() 傳回任務(wù)是否取消。
  • V get() 傳回任務(wù)結(jié)果。如果任務(wù)未完成,則阻塞執(zhí)行緒。
  • V get(long timeout, TimeUnit unit) 如有必要,最多等待給定時間以完成計算,然後檢索其結(jié)果。如果計算未完成,將在指定時間後拋出 TimeoutException。

快樂編碼和學(xué)習(xí)! ! !

如有任何問題請留言。

以上是Java中Executor服務(wù)概述的詳細內(nèi)容。更多資訊請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

hashmap和hashtable之間的區(qū)別? hashmap和hashtable之間的區(qū)別? Jun 24, 2025 pm 09:41 PM

HashMap與Hashtable的區(qū)別主要體現(xiàn)在線程安全、null值支持及性能方面。 1.線程安全方面,Hashtable是線程安全的,其方法大多為同步方法,而HashMap不做同步處理,非線程安全;2.null值支持上,HashMap允許一個null鍵和多個null值,Hashtable則不允許null鍵或值,否則拋出NullPointerException;3.性能方面,HashMap因無同步機制效率更高,Hashtable因每次操作加鎖性能較低,推薦使用ConcurrentHashMap替

為什麼我們需要包裝紙課? 為什麼我們需要包裝紙課? Jun 28, 2025 am 01:01 AM

Java使用包裝類是因為基本數(shù)據(jù)類型無法直接參與面向?qū)ο癫僮?,而實際需求中常需對象形式;1.集合類只能存儲對象,如List利用自動裝箱存儲數(shù)值;2.泛型不支持基本類型,必須使用包裝類作為類型參數(shù);3.包裝類可表示null值,用於區(qū)分未設(shè)置或缺失的數(shù)據(jù);4.包裝類提供字符串轉(zhuǎn)換等實用方法,便於數(shù)據(jù)解析與處理,因此在需要這些特性的場景下,包裝類不可或缺。

什麼是接口中的靜態(tài)方法? 什麼是接口中的靜態(tài)方法? Jun 24, 2025 pm 10:57 PM

StaticmethodsininterfaceswereintroducedinJava8toallowutilityfunctionswithintheinterfaceitself.BeforeJava8,suchfunctionsrequiredseparatehelperclasses,leadingtodisorganizedcode.Now,staticmethodsprovidethreekeybenefits:1)theyenableutilitymethodsdirectly

JIT編譯器如何優(yōu)化代碼? JIT編譯器如何優(yōu)化代碼? Jun 24, 2025 pm 10:45 PM

JIT編譯器通過方法內(nèi)聯(lián)、熱點檢測與編譯、類型推測與去虛擬化、冗餘操作消除四種方式優(yōu)化代碼。 1.方法內(nèi)聯(lián)減少調(diào)用開銷,將頻繁調(diào)用的小方法直接插入調(diào)用處;2.熱點檢測識別高頻執(zhí)行代碼並集中優(yōu)化,節(jié)省資源;3.類型推測收集運行時類型信息實現(xiàn)去虛擬化調(diào)用,提升效率;4.冗餘操作消除根據(jù)運行數(shù)據(jù)刪除無用計算和檢查,增強性能。

什麼是實例初始器塊? 什麼是實例初始器塊? Jun 25, 2025 pm 12:21 PM

實例初始化塊在Java中用於在創(chuàng)建對象時運行初始化邏輯,其執(zhí)行先於構(gòu)造函數(shù)。它適用於多個構(gòu)造函數(shù)共享初始化代碼、複雜字段初始化或匿名類初始化場景,與靜態(tài)初始化塊不同的是它每次實例化時都會執(zhí)行,而靜態(tài)初始化塊僅在類加載時運行一次。

什麼是工廠模式? 什麼是工廠模式? Jun 24, 2025 pm 11:29 PM

工廠模式用於封裝對象創(chuàng)建邏輯,使代碼更靈活、易維護、松耦合。其核心答案是:通過集中管理對象創(chuàng)建邏輯,隱藏實現(xiàn)細節(jié),支持多種相關(guān)對象的創(chuàng)建。具體描述如下:工廠模式將對象創(chuàng)建交給專門的工廠類或方法處理,避免直接使用newClass();適用於多類型相關(guān)對象創(chuàng)建、創(chuàng)建邏輯可能變化、需隱藏實現(xiàn)細節(jié)的場景;例如支付處理器中通過工廠統(tǒng)一創(chuàng)建Stripe、PayPal等實例;其實現(xiàn)包括工廠類根據(jù)輸入?yún)?shù)決定返回的對象,所有對象實現(xiàn)共同接口;常見變體有簡單工廠、工廠方法和抽象工廠,分別適用於不同複雜度的需求。

變量的最終關(guān)鍵字是什麼? 變量的最終關(guān)鍵字是什麼? Jun 24, 2025 pm 07:29 PM

InJava,thefinalkeywordpreventsavariable’svaluefrombeingchangedafterassignment,butitsbehaviordiffersforprimitivesandobjectreferences.Forprimitivevariables,finalmakesthevalueconstant,asinfinalintMAX_SPEED=100;wherereassignmentcausesanerror.Forobjectref

什麼是類型鑄造? 什麼是類型鑄造? Jun 24, 2025 pm 11:09 PM

類型轉(zhuǎn)換有兩種:隱式和顯式。 1.隱式轉(zhuǎn)換自動發(fā)生,如將int轉(zhuǎn)為double;2.顯式轉(zhuǎn)換需手動操作,如使用(int)myDouble。需要類型轉(zhuǎn)換的情況包括處理用戶輸入、數(shù)學(xué)運算或函數(shù)間傳遞不同類型的值時。需要注意的問題有:浮點數(shù)轉(zhuǎn)整數(shù)會截斷小數(shù)部分、大類型轉(zhuǎn)小類型可能導(dǎo)致數(shù)據(jù)丟失、某些語言不允許直接轉(zhuǎn)換特定類型。正確理解語言的轉(zhuǎn)換規(guī)則有助於避免錯誤。

See all articles