2021/04/14

[筆記] Effective Java #76 努力使失敗保持原子性

Effective Java 3rd 簡體中文版筆記 #76 努力使失敗保持原子性
當程式丟出異常時,調用者會希望能從異常中恢復正常,這對受檢異常來說尤為重要,一般而言,失敗的方法應該讓物件保持在被調用之前的狀態,具有這樣屬性的方法稱作失敗原子性 (failure atomic)。Atomic 有時是相當重要的,例如:A 轉帳給 B,正當 B 收到後錢進入帳戶,但 A 的錢還沒從帳戶扣款,這時突然跳電,系統發現轉帳問題,就必須將 A 及 B 的帳戶回復到轉帳前的狀態,並顯示轉帳失敗。

以下幾種方法能達到失敗原子性,
  1. 不可變物件,如果執行失敗,像是生成或是更新物件失敗,但不會有不一致的情況。
  2. 對於可變物件要保持失敗原子性,
    1. 應先檢查其參數的正確性,避免顯而易見的錯誤。
    2. 改變程式的順序,讓會失敗的部分在會改變物件狀態前執行。
    3. 撰寫復原程式碼,用於持久性的數據結構下。
    4. 拷貝一份臨時物件,確定全部的程式皆執行成功後,再將臨時物件的資料內容複製回原本物件中。
其實這在多執行緒下,是不容易達到的,往往會需要較多的資源及時間來達到。最後,任何異常皆不應該改變物件本來的狀態。

轉載請註明原文網址 https://cookieandcoketw.blogspot.com/2021/04/effective-java-76-failure-atomicity.html

沒有留言:

張貼留言