Java並行開發筆記1

2021-09-01 22:35:39 字數 669 閱讀 1495

加鎖機制既可以確保可見性又可以確保原子性,而volatile變數只能確保可見性。

當前僅當滿足一下所有條件時,才應該使用volatile變數:

執行緒封閉:當訪問共享的可變資料時,通常需要使用同步。一種避免使用同步的方式就是不共享資料。如果僅在單執行緒內訪問資料,就不需要同步。這種技術被稱為執行緒封閉(thread confinement).

ad-hoc 執行緒封閉是指,維護執行緒封閉性的職責完全由程式實現來承擔。

不可變物件

但滿足以下條件時,物件才是不可變的:

要安全地發布乙個物件,物件的引用以及物件的狀態必須同時對其他執行緒可見。乙個正確構造的物件可以通過以下方式來安全地發布:

在併發程式中使用和共享物件時,可以使用一些實用的策略,包括:

執行緒封閉。 執行緒封閉的物件只能由乙個執行緒擁有,物件被封閉在該執行緒中,並且只能由這個執行緒修改。

唯讀共享。 在沒有額外同步的情況下,共享的唯讀物件可以由多個執行緒併發訪問,但任何執行緒都不能修改它。共享的唯讀物件包括不可變物件和事實不可變物件。

執行緒安全共享。 執行緒安全的物件在其內部實現同步,因此多個執行緒可以通過物件的共有介面來進行訪問而不需要進一步的同步。

保護物件。 被保護的物件只能通過持有特定的鎖來訪問。保護物件包括封裝在其他執行緒安全物件中的物件,以及已發布的並且由某個特定鎖保護的物件。

Java並行開發筆記6

對於持有執行緒的服務,只要服務的存在時間大於建立執行緒的方法的存在時間,那麼就應該提供生命週期方法。在下面的程式中給出了乙個簡單的日誌服務示例,其中日誌操作在單獨的日誌執行緒中執行。產生日誌訊息的執行緒並不會將訊息直接寫入輸出流,而是由logwriter通過blockingqueue將訊息提交給日誌...

qt開發筆記1

qmainwindow繼承與qwidget 當qwidget 類中介面發生變化 例如 最大 小化 時,觸發showevent 函式。類似函式還有changeevent keypressevent paintevent resizeevent 等等。qeventloop類 在任何時候,你都可以建立乙個...

Qt opencv開發筆記 1

配置opencv環境 1 qt5.6 opencv2 qt開發的程式一般需要借助qmake生成makefile檔案。由於qmake在解析路徑的時候不能識別空格,因此需要確保opencv的安裝路徑中不能包含空格 c program files opencv是不行的 我是 直接安裝在d opencv位置...