多執行緒之共享模型

wang_nian發表於2020-10-17

一段程式碼塊內如果存在對共享資源的多執行緒讀寫操作,稱這段程式碼塊為 臨界區


1、synchronized解決方案

為了避免臨界區的競態條件發生,有多種手段可以達到目的。
阻塞式的解決方案:synchronized,Lock
非阻塞式的解決方案:原子變數


本次課使用阻塞式的解決方案:synchronized,來解決上述問題,即俗稱的【物件鎖】,它採用互斥的方式讓同一時刻至多隻有一個執行緒能持有【物件鎖】,其它執行緒再想獲取這個【物件鎖】時就會阻塞住。這樣就能保證擁有鎖的執行緒可以安全的執行臨界區內的程式碼,不用擔心執行緒上下文切換。
注意
       雖然 java 中互斥和同步都可以採用 synchronized 關鍵字來完成,但它們還是有區別的:
       互斥是保證臨界區的競態條件發生,同一時刻只能有一個執行緒執行臨界區程式碼;
       同步是由於執行緒執行的先後、順序不同、需要一個執行緒等待其它執行緒執行到某個點;

 

相關文章