標簽 ‘ Executor

戲(細)說Executor框架線程池任務執行全過程(上)

原文鏈接 ??歸檔下發表于infoq.com 2015年6月的兩篇文章。

內容綜述

基于Executor接口中將任務提交和任務執行解耦的設計,ExecutorService和其各種功能強大的實現類提供了非常簡便方式來提交任務并獲取任務執行結果,封裝了任務執行的全部過程。本文嘗試通過對j.u.c.下該部分源碼的解析以ThreadPoolExecutor為例來追蹤任務提交、執行、獲取執行結果的整個過程。為了避免陷入枯燥的源碼解釋,將該過程和過程中涉及的角色與我們工作中的場景和場景中涉及的角色進行映射,力圖生動和深入淺出。

閱讀全文

Oracle官方并發教程之執行器(Executors)

原文鏈接,譯文鏈接,譯者:Greenster,校對:鄭旭東

在之前所有的例子中,Thread對象表示的線程和Runnable對象表示的線程所執行的任務之間是緊耦合的。這對于小型應用程序來說沒問題,但對于大規模并發應用來說,合理的做法是將線程的創建與管理和程序的其他部分分離開。封裝這些功能的對象就是執行器,接下來的部分將講詳細描述執行器。
閱讀全文

Oracle官方并發教程之線程池

原文鏈接,譯文鏈接,譯者:Greenster,校對:鄭旭東

在java.util.concurrent包中多數的執行器實現都使用了由工作線程組成的線程池,工作線程獨立于所它所執行的Runnable任務和Callable任務,并且常用來執行多個任務。

使用工作線程可以使創建線程的開銷最小化。在大規模并發應用中,創建大量的Thread對象會占用占用大量系統內存,分配和回收這些對象會產生很大的開銷。

閱讀全文

Oracle官方并發教程之Executor接口

原文鏈接,譯文鏈接,譯者:Greenster,校對:鄭旭東

java.util.concurrent中包括三個Executor接口:

  • Executor,一個運行新任務的簡單接口。
  • ExecutorService,擴展了Executor接口。添加了一些用來管理執行器生命周期和任務生命周期的方法。
  • ScheduledExecutorService,擴展了ExecutorService。支持Future和定期執行任務。

通常來說,指向Executor對象的變量應被聲明為以上三種接口之一,而不是具體的實現類。 閱讀全文

測試并發應用(三)監控Executor框架

聲明:本文是《 Java 7 Concurrency Cookbook 》的第八章, 作者: Javier Fernández González 譯者:鄭玉婷

監控Executor框架

Executor 框架提供從線程的創建和管理來分別實現任務來執行這些任務的機制。如果你使用一個執行者,你只需要實現 Runnable 對象并把他們發送給執行者。 執行者的責任是管理線程。當你發一個任務給執行者,它會嘗試使用pooled線程來執行這個任務,來避免創建新的任務。此機制由 Executor 接口提供,它是以 ThreadPoolExecutor 類來實現的。

在這個指南,你將學習從ThreadPoolExecutor執行者可以獲取的信息和如何獲取這些信息。 閱讀全文

定制并發類(五)在一個Executor對象中使用我們的ThreadFactory

聲明:本文是《 Java 7 Concurrency Cookbook 》的第七章,作者: Javier Fernández González ? ? 譯者:許巧輝

在一個Executor對象中使用我們的ThreadFactory

在前面的指南中,實現ThreadFactory接口生成自定義線程,我們引進了工廠模式和提供如何實現一個實現ThreadFactory接口的線程的工廠例子。

執行者框架(Executor framework)是一種機制,它允許你將線程的創建與執行分離。它是基于Executor、ExecutorService接口和實現這兩個接口的ThreadPoolExecutor類。它有一個內部的線程池和提供一些方法,這些方法允許你提交兩種任務給線程池執行。這兩種任務是:

  • 實現Runnable接口的類,用來實現沒有返回結果的任務
  • 實現Callable接口的類,用來實現有返回結果的任務

在執行者框架(Executor framework)的內部,它提供一個ThreadFactory接口來創建線程,這是用來產生新的線程。在這個指南中,你將學習如何實現你自己的線程類,用一個工廠來創建這個類的線程,及如何在執行者中使用這個工廠,所以這個執行者將執行你的線程。

閱讀全文

定制并發類(三)實現一個基于優先級的Executor類

聲明:本文是《 Java 7 Concurrency Cookbook 》的第七章,作者: Javier Fernández González ? ? 譯者:許巧輝

實現一個基于優先級的Executor類

在Java并發API的第一個版本中,你必須創建和運行應用程序中的所有線程。在Java版本5中,隨著執行者框架(Executor framework)的出現,對于并發任務的執行,一個新的機制被引進。

使用執行者框架(Executor framework),你只要實現你的任務并把它們提交給執行者。這個執行者負責執行你的任務的線程的創建和執行。

在內部,一個執行者使用一個阻塞隊列來存儲待處理任務。以任務到達執行者的順序來存儲。一個可能的替代就是使用一個優先級列隊來存儲新的任務。這樣,如果一個高優先級的新任務到達執行者,它將比其他已經在等待一個線程來執行它們,且低優先級的任務先執行。

在這個指南中,你將學習如何實現一個執行者,它將使用優先級隊列來存儲你提交執行的任務。

閱讀全文

線程執行者(十二)執行者控制被拒絕的任務

聲明:本文是《 Java 7 Concurrency Cookbook 》的第四章,作者: Javier Fernández González ? ? 譯者:許巧輝 ? ? 校對:方騰飛,葉磊

執行者控制被拒絕的任務

當你想要結束執行者的執行,你使用shutdown()方法來表明它的結束。執行者等待正在運行或等待它的執行的任務的結束,然后結束它們的執行。

如果你在shutdown()方法和執行者結束之間,提交任務給執行者,這個任務將被拒絕,因為執行者不再接收新的任務。ThreadPoolExecutor類提供一種機制,在調用shutdown()后,不接受新的任務。

在這個指南中,你將學習如何通過實現RejectedExecutionHandler,在執行者中管理拒絕任務。
閱讀全文

線程執行者(十一)執行者分離任務的啟動和結果的處理

聲明:本文是《 Java 7 Concurrency Cookbook 》的第四章,作者: Javier Fernández González ? ? 譯者:許巧輝 ? ? 校對:方騰飛,葉磊

執行者分離任務的啟動和結果的處理

通常,當你使用執行者執行并發任務時,你將會提交 Runnable或Callable任務給這個執行者,并獲取Future對象控制這個方法。你可以發現這種情況,你需要提交任務給執行者在一個對象中,而處理結果在另一個對象中?;谶@種情況,Java并發API提供CompletionService類。

CompletionService 類有一個方法來提交任務給執行者和另一個方法來獲取已完成執行的下個任務的Future對象。在內部實現中,它使用Executor對象執行任務。這種行為的優點是共享一個CompletionService對象,并提交任務給執行者,這樣其他(對象)可以處理結果。其局限性是,第二個對象只能獲取那些已經完成它們的執行的任務的Future對象,所以,這些Future對象只能獲取任務的結果。

在這個指南中,你將學習如何使用CompletionService類把執行者啟動任務和處理它們的結果分開。 閱讀全文

線程執行者(十)執行者控制一個任務完成

聲明:本文是《 Java 7 Concurrency Cookbook 》的第四章,作者: Javier Fernández González ? ? 譯者:許巧輝 ? ? 校對:方騰飛,葉磊

執行者控制一個任務完成

FutureTask類提供一個done()方法,允許你在執行者執行任務完成后執行一些代碼。你可以用來做一些后處理操作,生成一個報告,通過e-mail發送結果,或釋放一些資源。當執行的任務由FutureTask來控制完成,FutureTask會內部調用這個方法。這個方法在任務的結果設置和它的狀態變成isDone狀態之后被調用,不管任務是否已經被取消或正常完成。

默認情況下,這個方法是空的。你可以重寫FutureTask類實現這個方法來改變這種行為。在這個指南中,你將學習如何重寫這個方法,在任務完成之后執行代碼。

準備工作…

這個指南的例子使用Eclipse IDE實現。如果你使用Eclipse或其他IDE,如NetBeans,打開它并創建一個新的Java項目。
閱讀全文

線程執行者(八)執行者周期性地運行一個任務

聲明:本文是《 Java 7 Concurrency Cookbook 》的第四章,作者: Javier Fernández González ? ? 譯者:許巧輝 ? ? 校對:方騰飛

執行者周期性地運行一個任務

執行者框架提供ThreadPoolExecutor類,使用池中的線程執行并發任務,從而避免所有線程的創建操作。當你提交任務給執行者,根據它的配置,它盡快地執行任務。當它結束,任務將被執行者刪除,如果你想再次運行任務,你必須再次提交任務給執行者。

但是執行者框架通過ScheduledThreadPoolExecutor類可以執行周期性任務。在這個指南中,你將學習如何通過使用這個類的功能來安排一個周期性任務。
閱讀全文

線程執行者(九)執行者取消一個任務

聲明:本文是《 Java 7 Concurrency Cookbook 》的第四章,作者: Javier Fernández González ? ? 譯者:許巧輝 ? ? 校對:方騰飛

執行者取消一個任務

當你使用執行者工作時,你不得不管理線程。你只實現Runnable或 Callable任務和把它們提交給執行者。執行者負責創建線程,在線程池中管理它們,當它們不需要時,結束它們。有時候,你想要取消已經提交給執行者 的任務。在這種情況下,你可以使用Future的cancel()方法,它允許你做取消操作。在這個指南中,你將學習如何使用這個方法來取消已經提交給執行者的任務。

準備工作…

這個指南的例子使用Eclipse IDE實現。如果你使用Eclipse或其他IDE,如NetBeans,打開它并創建一個新的Java項目。

閱讀全文

線程執行者(七)執行者延遲運行一個任務

聲明:本文是《 Java 7 Concurrency Cookbook 》的第四章,作者: Javier Fernández González ? ? 譯者:許巧輝 ? ? 校對:方騰飛,葉磊

執行者延遲運行一個任務

執行者框架提供ThreadPoolExecutor類,使用池中的線程來執行Callable和Runnable任務,這樣可以避免所有線程的創建操作。當你提交一個任務給執行者,會根據執行者的配置盡快執行它。在有些使用情況下,當你對盡快執行任務不感覺興趣。你可能想要在一段時間之后執行任務或周期性地執行任務?;谶@些目的,執行者框架提供 ScheduledThreadPoolExecutor類。

在這個指南中,你將學習如何創建ScheduledThreadPoolExecutor和如何使用它安排任務在指定的時間后執行。
閱讀全文

線程執行者(六)運行多個任務并處理所有結果

聲明:本文是《 Java 7 Concurrency Cookbook 》的第四章,作者: Javier Fernández González ? ? 譯者:許巧輝 ? ? 校對:方騰飛,葉磊

運行多個任務并處理所有結果

執行者框架允許你在不用擔心線程創建和執行的情況下,并發的執行任務。它還提供了Future類,這個類可以用來控制任務的狀態,也可以用來獲得執行者執行任務的結果。

如果你想要等待一個任務完成,你可以使用以下兩種方法:

  • 如果任務執行完成,Future接口的isDone()方法將返回true。
  • ThreadPoolExecutor類的awaitTermination()方法使線程進入睡眠,直到每一個任務調用shutdown()方法之后完成執行。

這兩種方法都有一些缺點。第一個方法,你只能控制一個任務的完成。第二個方法,你必須等待一個線程來關閉執行者,否則這個方法的調用立即返回。

ThreadPoolExecutor類提供一個方法,允許你提交任務列表給執行者,并且在這個列表上等待所有任務的完成。在這個指南中,你將學習如何使用這個特性,實現一個示例,執行3個任務,并且當它們完成時將結果打印出來。
閱讀全文

線程執行者(五)運行多個任務并處理第一個結果

聲明:本文是《 Java 7 Concurrency Cookbook 》的第四章,作者: Javier Fernández González ? ? 譯者:許巧輝 ? ? 校對:方騰飛,葉磊

運行多個任務并處理第一個結果

在并發編程中的一個常見的問題就是,當有多種并發任務解決一個問題時,你只對這些任務的第一個結果感興趣。比如,你想要排序一個數組。你有多種排序算法。 你可以全部啟用它們,并且獲取第一個結果(對于給定數組排序最快的算法的結果)。

在這個指南中,你將學習如何使用ThreadPoolExecutor類的場景。你將繼續實現一個示例,一個用戶可以被兩種機制驗證。如果使用其中一個機制驗證通過,用戶將被確認驗證通過。
閱讀全文

return top

779彩票平台 sk7| yqq| q66| kky| e6e| you| 6ig| gk6| uky| q6i| osq| 6ci| ca7| ec5| osc| s5o| ukg| 5im| ua5| kmo| i5u| gos| 6ko| sc6| uae| q4o| geg| mmy| 4es| es4| qmy| ua5| uma| w5o| eug| 5qo| uk5| skg| y3y| ewa| gmy| 4oi| oc4| kcw| w4g| yme| 4ic| ks4| csc| u3s| iak| 3qu| sc3| us3| wyk| o3m| ays| 3my| ac4| ycu| em2| gye| c2c| suy| 2sg| us2| oc2| kac| y3e| cqc| 3qq| yw3| skc| g1w| aqc| 1ya| sg1| iww| o2s| u2u| ywq| 2oc| ms2| miy| w0e| qes| 0iq| yq1| 1gs| us1|