多執行緒書寫及code review規範

2021-08-30 20:39:35 字數 1031 閱讀 6411

1.   不允許將calendar用於類的靜態成員

calendar是天生的多執行緒不安全的類,將其用於類的靜態成員可能導致錯誤的在多執行緒中訪問。

2.   dateformat以及******dateformat非執行緒安全,不允許將dateformat用於類的靜態成員。

3.   延遲初始化的類成員應宣告為volatile

延遲初始化的類靜態成員,如果沒有用synchronized的加以保護,則必須以volatile修飾,為了避免物件的狀態發布不完整的問題。建議使用initialization on demand holder idiom 。

4.   不允許在持有鎖的時候呼叫thread.sleep()

在持有鎖的時候呼叫thread.sleep()很可能導致等待該鎖的其它執行緒被長時間的掛起,從而嚴重影響程式效能和延展性。

5.   不允許在boolean物件上使用synchronized關鍵字

由於boolean物件通常僅以兩個全域性的常型例項出現,在其上使用synchronized關鍵字可能導致與其它共用該常型例項的完全不相關的**形成互斥關係,這往往並不是程式設計者的初衷。

6.   wait應置於條件迴圈中是使用,wait前檢查所等待的條件已經滿足,並避免意外喚醒的影響

在wait前判斷等待的條件是否已滿足可以避免在wait之前的notify通知被忽略。(儘管條件判斷與wait兩步也並不能看作原子操作)

7.   使狀態變數為不可變的,盡量使用不可變的物件或者成員變數,合適的情況下,才使用可變的物件和成員變數

8.   在任何訪問狀態變數的時候注意視情況使用同步

9.  每個共享的可變變數都需要由唯一乙個確定的鎖保護。

維護者應該清楚這個鎖(對於每個可被多個執行緒訪問的可變狀態變數,如果所有訪問它的執行緒在執行時都占有同乙個鎖,這種情況下,我們稱這個變數是由這個鎖保護的)

10.  為了避免同步的不一致性,類似"get"的讀操作可能也需要同步。

11.  盡量使用現成的解決方案來處理多執行緒問題例如,util.concurrent

12.  縮小鎖的作用範圍,縮短鎖的存在時間

註解及多執行緒

註解 自定義註解 成員型別受限 基本型別及string class annotation enumeration 註解中成員取名為name 可以用default為成員指定預設值 內建註解 override 重寫 depercateed 過時 suppresswaring 元註解 target 多執行...

VC MFC 多執行緒及執行緒同步

自動事件 cevent類的建構函式,第二個引數為false,是自動事件,自動事件在呼叫setevent函式被使用後能夠自動恢復為無訊號狀態。預設情況下,是自動事件。1 宣告事件為全域性物件。包含使用執行緒同步物件所需要的標頭檔案 include afxmt.h cevent eventobj 構造乙...

Java多執行緒及執行緒池

提問 我開啟了乙個qq 又開啟了乙個遊戲,請問我開啟了兩個執行緒嗎?回答 概念理解錯誤,你其實開啟是兩個程序,為什麼呢,請看概念 程序是正在執行的程式,是系統呼叫資源和進行資源分配的基本單位。比如所說的qq 和乙個遊戲,這就是兩個正在執行的程式。我們的作業系統都是多程序的。繼續提問 早期的計算機是單...