1. 程式人生 > >《JAVA併發程式設計實踐》第四章物件的組合

《JAVA併發程式設計實踐》第四章物件的組合

1.如何寫出一個執行緒安全的類?

基本要素:
    找出構成物件狀態的所有變數
    找出約束狀態變數的不變性條件(取值範圍 前驗條件或者後驗條件)
    建立物件狀態的併發管理策略

實際中的程式碼
訂單類包含自身的狀態和商品的引用
public class Order(){
    private Integer status;
    private Product product;
    public void setStatus(Integer status){
        if(status > 10 || status < 0){
            //做其他處理 
} this.status = status; } public void setProduct(Product product){ this.product = product; } //product的getid是執行緒不安全的,建立併發管理策略 public synchronized int getProduct(){ return product.getId(); } } 商品類返回一個id自增的int,getid方法不是一個執行緒安全 public class Product
(){ private Integer id public int getId(){ return id++; } }

2封裝-例項封閉機制

封裝-例項封閉機制
   將資料封裝在物件內部, 可以將資料的訪問限制在物件的方法上,從而更容易確保執行緒在訪問資料時持有正確的鎖
裝飾器模式
監視器模式

3委託

如果一個類由多個獨立且執行緒安全性的狀態變數組成,並且在所有的操作中都不包含無效的狀態轉換,那麼可以將執行緒安全性委託給底層的狀態變數,而不是這些變數的包裝類。
將執行緒安全性委託給現有的執行緒安全類,他是建立執行緒安全類的一個最有效的策略

相關推薦

Java併發程式設計實踐——(組合物件)》

組合物件 我們不希望為了獲得執行緒安全而去每次分析記憶體訪問;而希望執行緒安全的元件能夠以安全的方式組合成更大的元件或程式。 4.1 設計執行緒安全的類 4.1.1 收集同步需求 4.1.2 狀態依賴的操作 4.1.3 狀態所有權 4.2

Java併發程式設計實踐——(共享物件)》

共享物件## 編寫正確的併發程式的關鍵在於對共享的、可變的物件狀態進行訪問管理。 上一章使用同步來避免多個執行緒在同一時間訪問同一資料。 同步還有另外的方面:記憶體可見性。 3.1 可見性 public class NoVisibility { private static

Java併發程式設計實踐——(取消和關閉)》

取消和關閉 中斷——一種協作機制,使執行緒能夠要求另一個執行緒停止當前工作。 7.1 任務取消 當外部程式碼能夠在活動自然完成之前,把它改為完成狀態,那個這個活動被稱為可取消的。 7.1.1 中斷 執行緒中斷方法: 中斷並不會真正中斷一個正在執行的執行緒,它僅

JAVA併發程式設計實踐》第二 執行緒安全性

1.多執行緒環境為什麼會出現問題? 由於競態條件的存在。 競態條件:基於一種可能失效的觀察結果來做出判斷或執行某個計算 競態條件分兩種: - **先檢查後執行**

JAVA併發程式設計實踐物件組合

1.如何寫出一個執行緒安全的類? 基本要素: 找出構成物件狀態的所有變數 找出約束狀態變數的不變性條件(取值範圍 前驗條件或者後驗條件) 建立物件狀態的併發管理策略 實際中的程式碼 訂單類包含自身的狀態和商品的引用 public

JAVA併發程式設計實踐物件的共享

1 怎麼理解發布和逸出? 轉自別人的回答講的很詳細 點選這裡 還有這裡 2.如何構造一個安全的物件? 不可變的物件一定是執行緒安全的 在多執行緒訪問這個不可變的物件時,物件的例項域都是固定不變的,也就不存在多執行緒

Java併發程式設計實踐——第一(介紹)、第二(執行緒安全)》

介紹## 1.1 併發的簡短歷史 相同的關注點(資源利用,公平和方便) 不僅促進了程序的發展,也促進了執行緒的發展、 執行緒允許程式控制流的多重分支同時存在於一個程序。它們共享程序範圍內的資源,比如記憶體和檔案控制代碼,但是執行緒有自己的程式計數器、棧、和本地變數。 1.2

201711671118《Java程式設計總結

4.1面向物件的三個特性 封裝性,多型性,繼承性。 4.2 類 ①類的程式設計風格: 類名、介面名用大駝峰命名法。 變數名、方法名用小駝峰命名法。 類名最好容易識別、見名知意。 ②成員變數 成員變數的有效範圍:成員變數在整個類內都有效,其有效性與其宣告位置無關。

Java程式設計學習總結

201711671111 《Java程式設計》第四章學習總結二 教材學習內容總結 1.方法過載是兩種多型的一種。意思是一類中可以有多個方法具有相同的名字,但這些方法的引數必須不同。 方法的返回型別和引數名字不參與比較,也就是說,如果兩個方法的名字相同,即使返回型別不同,也

201711671106《Java程式設計學習總結

教材學習內容總結 主要學習了第四章類與物件 一、java是一種面嚮物件語言,具有封裝、繼承、多型三種基本特性。 二、類 類是java的基本要素,被類所定義的變數為物件。 類的定義包括類宣告和方法定義,方法包括方法頭和體。 類宣告的變數分為成員變數和區域性變數,而成員變數又分為

Java 程式設計思想筆記

    第四章執行控制流程     程式在執行過程中控制他的世界,利用執行控制語句。     Java 使用了 C語言中的所有流程控制語句,Java中設計的關鍵字 if-else while do-while for return break 以及選擇語句 switch。

201711671135 《Java程式設計學習總結

教材學習內容 1.程式語言的發展階段 面向機器語言(組合語言、機器語言等低階語言)→面向過程語言(語言把程式碼組成叫作過程或函式的塊,每塊的目標是完成某個任務)→面嚮物件語言(封裝性、繼承、多型【操作名稱的多型和有關繼承的多型】) 2.屬性通過變數來刻畫,行為通過方法來體現。類把資料和對

學習筆記之《Java核心技術卷I》---- 物件與類

識別類的簡單規則是在分析問題的過程中尋找名次,而方法對應著動詞 類之間最常見的三種關係: 依賴關係:即"uses-a"的關係。如果一個類的方法操作另一個類的物件(方法引數),也就是說這個類依賴於另一個類。應該儘可能地將相互依賴的類減至最少,即讓類之間的耦合度更小 聚合

java併發程式設計實踐》1-3要點總結

名詞解析 1. 上下文切換 排程程式臨時掛起當前執行的執行緒時,另一個執行緒開始執行。也就是執行緒切換,在應用程式中很常見,帶來的系統開銷巨大。 2. 原子性 程式可以作為單獨的、不可分割的一次操作執行,稱為原子操作,具有原子性,例如賦值操作:a

java核心技術 物件與類

4.1 面向物件概述 面向物件層序設計(OOP),Java是完全面向物件。 面向物件的程式是由物件組成的,每個物件包含對使用者公開的特定功能部分和隱藏的實現部分。 面向物件將資料放在第一位。 4.1.1 類 類(class)是構造物件的模板或藍圖。

Java 程式設計思想—— 控制執行流程

         就像有知覺的生物一樣,程式必須在執行過程中控制他的世界,並做出選擇。在Java中你要使用執行控制語句來做出選擇。          1. true和false   Java不允許將一

Python程式設計 從入門到實踐 作業參考答案 (部分)

4-2 動物animals = ["dog","cat","panda","squirrel"] for a in animals: print(a.title()) for a in animals: print("A",a,"could be so cut

java面向對象

cat code per ext 修飾符 health 不能 基礎知識 類名 一、 接口的基礎知識 1、為什麽需要接口 為解決實際應用中,單一繼承無法解決的問題 2、什麽是接口 a) 基本概念? 接口是一種特殊的抽象類 接口是一種規範和標準,可以約束類的行為,是一些

Java編程思想

AR 方法 true ava post for循環 false sys 編譯器 第四章 目錄: 4.1 true和false 4.2 if-else 4.3 叠代 4.4 Foreach語法 4.5 return 4.6 break和continue 4.7 goto

JAVA併發程式設計實踐》戈茨.掃描版.pd

書籍簡介: 《JAVA併發程式設計實踐》中,這些便利工具的創造者不僅解釋了它們究竟如何工作、如何使用,同時,還闡釋了創造它們的原因,及其背後的設計模式。隨著多核處理器的普及,使用併發成為構建高效能應用程式的關鍵。Java 5以及6在開發併發程式取得了顯著的進步,提高了Java虛擬機器的效能