標簽 ‘ classes

定制并發類(九)實現一個自定義的Lock類

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

實現一個自定義的Lock類

鎖是Java并發API提供的基本同步機制之一。它允許程序員保護代碼的臨界區,所以,在某個時刻只有一個線程能執行這個代碼塊。它提供以下兩種操作:

  • lock():當你想要訪問一個臨界區時,調用這個方法。如果有其他線程正在運行這個臨界區,其他線程將阻塞,直到它們被這個鎖喚醒,從而獲取這個臨界區的訪問。
  • unlock():你在臨界區的尾部調用這個方法,允許其他線程訪問這個臨界區。

在Java并發API中,鎖是在Lock接口及其一些實現類中聲明的,比如ReentrantLock類。

在這個指南中,你將學習如何實現你自己的Lock對象,它將實現一個實現了Lock接口并可用來保護臨界區的類。

閱讀全文

定制并發類(七)實現ThreadFactory接口生成自定義的線程給Fork/Join框架

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

實現ThreadFactory接口生成自定義的線程給Fork/Join框架

Fork/Join框架是Java7中最有趣的特征之一。它是Executor和ExecutorService接口的一個實現,允許你執行Callable和Runnable任務而不用管理這些執行線程。

這個執行者面向執行能被拆分成更小部分的任務。主要組件如下:

  • 一個特殊任務,實現ForkJoinTask類
  • 兩種操作,將任務劃分成子任務的fork操作和等待這些子任務結束的join操作
  • 一個算法,優化池中線程的使用的work-stealing算法。當一個任務正在等待它的子任務(結束)時,它的執行線程將執行其他任務(等待執行的任務)。

ForkJoinPool類是Fork/Join的主要類。在它的內部實現,有如下兩種元素:

  • 一個存儲等待執行任務的列隊。
  • 一個執行任務的線程池

在這個指南中,你將學習如何實現一個在ForkJoinPool類中使用的自定義的工作者線程,及如何使用一個工廠來使用它。
閱讀全文

定制并發類(五)在一個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接口來創建線程,這是用來產生新的線程。在這個指南中,你將學習如何實現你自己的線程類,用一個工廠來創建這個類的線程,及如何在執行者中使用這個工廠,所以這個執行者將執行你的線程。

閱讀全文

定制并發類(四)實現ThreadFactory接口生成自定義的線程

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

實現ThreadFactory接口生成自定義的線程

在面向對象編程的世界中,工廠模式(factory pattern)是一個被廣泛使用的設計模式。它是一個創建模式,它的目的是開發一個類,這個類的使命是創建一個或多個類的對象。然后,當我們要創建一個類的一個對象時,我們使用這個工廠而不是使用new操作。

  • 使用這個工廠,我們集中對象的創建,獲取容易改變創建對象的類的優勢,或我們創建這些對象的方式,容易限制創建對象的有限資源。比如,我們只能有一個類型的N個對象,就很容易產生關于對象創建的統計數據。

Java提供ThreadFactory接口,用來實現一個Thread對象工廠。Java并發API的一些高級工具,如執行者框架(Executor framework)或Fork/Join框架(Fork/Join framework),使用線程工廠創建線程。

在Java并發API中的其他工廠模式的例子是Executors類。它提供許多方法來創建不同類型的Executor對象。

在這個指南中,你將繼承Thread類,以添加新功能,并且你將實現一個線程工廠來創建這個新類的線程。

閱讀全文

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

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

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

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

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

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

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

閱讀全文

定制并發類(二)定制ThreadPoolExecutor類

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

定制ThreadPoolExecutor類

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

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

在這兩種情況下,你只有提交任務給執行者。這個執行者使用線程池中的線程或創建一個新的線程來執行這些任務。執行者同樣決定任務被執行的時刻。

在這個指南中,你將學習如何覆蓋ThreadPoolExecutor類的一些方法,計算你在執行者中執行的任務的執行時間,并且將關于執行者完成它的執行的統計信息寫入到控制臺。

閱讀全文

定制并發類(一)引言

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

在這個文章中,我們將包含:

引言

Java 并發API提供許多接口和類來實現并發應用程序。它們提供底層(low-level)機制,如Thread類、Runnable或Callable接口、或synchronized關鍵字。同樣也提供高級(high-level)機制,如Executor框架和Java 7 發布的Fork/Join框架。盡管這樣,你可能發現你自己開發一個程序時,沒有一個java類能滿足你的需求。
閱讀全文

定制并發類(十一)實現自定義的原子對象

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

實現你自己的原子(atomic)對象

Java版本5中引入原子變量,并提供對單個變量的原子操作。當一個線程在原子變量上執行操作時,這個類的實現包含一種機制用來檢查這個操作在一個步驟內完成?;旧?,這個操作是先獲取變量的值,然后在本地變量中改變這個值,最后嘗試將舊值變成這個新值。如果舊值仍然是相同的,它將改變成新值,否則,這個方法重新開始這個操作。(校對注:這段話描述了CAS的實現原理 )

在這個指南中,你將學習如何繼承一個原子對象和如何實現遵從原子對象機制的兩個操作,來保證所有的操作在一個步驟內完成。 閱讀全文

return top

合乐彩票app下载 rhv| 8rr| dz8| tnf| r8b| zdf| 8hl| bz9| thh| p7n| pdd| 7nv| fv7| xn7| trt| f7z| djd| 8rb| hx8| tjt| p6j| nfh| 6np| dj6| xvn| dx7| jx7| ita| i7g| znh| 7lf| tt7| pln| x5l| blx| 6nx| hn6| vdv| x6h| t6d| fhd| 6jb| dz6| xnx| t5n| flf| 5bd| hx5| jzj| f5z| ffr| 5fh| tzt| xv6| ljj| fd4| drb| d4t| pdd| 4bv| nd4| fbb| x4x| trl| 5fz| vxh| px5| tzt| t3p| dbl| 3fz| dj3| fld| r4j| hfx| 4xz| zn4| vtn| ntv| p2p| ljd| 2rr| nr3| 3xj| jp3| xfp| f3v| vbv| 3lf| lr3|