Java中線程同步鎖和互斥鎖有啥區別?

時間 2021-05-31 21:55:51

1樓:油點筆鼠

@大寬寬

@chen Kingwen 兩個大神都把問題解釋的很清楚了,以下做補充

什麼時候需要用鎖?在沒有十足把握的情況下,如果多個執行緒都會修改同乙個變數,必須要用鎖,是必須。

互斥的字面意思是相互排斥,通常我們說執行緒 A 與執行緒 B 互斥,意思是兩個執行緒在某乙個場景中不能同時執行。

同步的字面意思是跟進,通常我們說執行緒 A 需要同步執行緒 B 的狀態,意思是執行緒 A 需要跟進執行緒 B 的工作進度。

我們說執行緒之間的同步的時候,大多數情況要根據場景來理解它的意思,可能指的是互斥,也可能指的同步。

2樓:

按理解,絕不是synchronized和lock的區別,這兩個幹的是乙個事情,只是synchronized直接靠jvm指令,lock靠jdk裡aqs,但都是做互斥的事情,執行緒競爭共享資源,一時間乙個獲取其他等。覺得上面回答很有道理,柵欄,訊號量,閉鎖或者執行緒join才是實現同步的方式。

3樓:

可以是乙個東西的兩個名字。

互斥是這個東西的設計的主要功能;同步是我們打算利用這個東西來實現的目的。

比喻的話,大概是電冰箱和製冷機這個關係吧。

4樓:chen Kingwen

所謂互斥,就是不同執行緒通過競爭進入臨界區(共享的資料和硬體資源),為了防止訪問衝突,在有限的時間內只允許其中之一獨占性的使用共享資源。如不允許同時寫

同步關係則是多個執行緒彼此合作,通過一定的邏輯關係來共同完成乙個任務。一般來說,同步關係中往往包含互斥,同時對臨界區的資源會按照某種邏輯順序進行訪問。如先生產後使用

總的來說,兩者的區別就是:

互斥是通過競爭對資源的獨佔使用,彼此之間不需要知道對方的存在,執行順序是乙個亂序。

同步是協調多個相互關聯執行緒合作完成任務,彼此之間知道對方存在,執行順序往往是有序的。

互斥鎖,同步鎖,臨界區,互斥量,訊號量,自旋鎖之間聯絡是什麼?

談作業系統的概念最好是要結合具體的作業系統實現,也就是原始碼。就拿FreeRTOS這個作業系統來說,互斥量是一種特殊的二值訊號量,用於控制在兩個或多個任務間訪問共享資源。兩者間最大的區別在於訊號量在被獲得之後所發生的事情 獲得用於互斥的訊號量的任務必須歸還這個訊號量。獲得用於同步的訊號量通常是完成同...

用了執行緒互斥鎖和序列有什麼區別嗎?

acebear 你家五口人 旁白 這是響應國家號召設定3個孩子 吃飯,做了一大海碗雞湯 為了衛生,你家約定喝雞湯用 公用勺 舀到自己碗裡 序列 就是你爹先吃,你爹吃完了,你娘才能開始吃 你娘吃完了,你姐才能吃 你姐吃完了,你才能吃 你吃完了,你妹妹才能吃 旁白 搞笑吧,又不是猴,為啥要搞這麼森嚴的等...

java 在同步鎖內外判斷兩次,有什麼用處?

rail gun 效能問題,如果按照題主這樣寫,每次都要進入同步狀態。而如果在之前加乙個判斷的話,那麼大部分不為null的情況就不用被同步了提高效率 朱涵俊 這個同步只有建立的時候需要,避免建立多個例項。而建立只需要一次,大部分時候只需要獲取已經建立的例項,就是說已經建立之後就不需要同步了。因此在同...