簡體   English   中英

線程死鎖和同步

[英]Thread deadlocking and synchronization

我知道我需要適當地使用同步以避免在使用多個線程時出現死鎖,但是我想知道:

修改值檢查變量時都需要同步,還是在修改值時才需要同步,而在檢查變量時就不需要同步?

至於死鎖:Darkhogg已經正確指出死鎖是由於不正確的同步和工作流導致的。

同步狀態修改和狀態觀察:是的,您需要同時同步兩者。 輸入同步方法時獲得的對象鎖的作用是,沒有其他線程可以輸入相同或另一個需要相同對象鎖的同步代碼塊(在同一對象上同步)。 就是說,如果不同步觀察對象狀態的代碼,則該代碼可能與修改狀態的同步代碼並發執行,並且您可能會讀取無效的對象狀態。

閱讀該文章后,我將為您提供有關同步的更好的知識庫http://javarevisited.blogspot.com/2011/04/synchronization-in-java-synchronized.html

如果您擁有的資源不是線程安全的,則需要保護檢查和修改其值。

正如Darkhogg提到的,如果使用不正確,同步會導致死鎖。

您需要同步正在更新(更改數據成員)值並且可以由多個線程執行的數據成員上的代碼塊。

使其同步將確保不會同時更新數據成員。

同步時不要使用以避免死鎖

Synchronize關鍵字可確保在多線程環境中安全地運行線程。 盡管您有多線程,但您想要修改和檢查成員變量。

為此,創建一個類,其中包含要線程安全處理的數據變量。 創建用於附加和檢查變量的同步函數。

class exam
{
 ....

 synchronized void examine()
 {}


 synchronized void amending()
 {}


}

創建該類的單個對象,並將其傳遞給您的所有線程。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM