鎖機制到加鎖的必要性

coderlwz發表於2024-09-08

鎖在計算機程式設計終端和服務端的應用很多。後端應用的分層開發以依賴注入的方式通訊相互 連線。代理模式的應用在分層解耦。應用終端的鎖機制一般都是視覺化的應用方式。計算機 應用中的鎖種類很多 。鎖的主要應用方式是保證區域的安全性。


JAVA 的 開 發 領 域 基 礎 鎖 機 制 是 塊 的 方 式 的 字 是 SYNCRONIZED RETRAINEDLOCK 是一種靈活性比較強的可重入鎖 。同步鎖是 JAVA 高並 發領域中的基礎鎖。多執行緒高併發是使用者量請求量過大的必然結果。分散式流量分發是一種 解決高併發伺服器過載的一種方式。很多的系統操作過程在前置端處理的結果對系統的效能 提升很大。現在的微服務框架處理高併發的方式就是前端限流,後端使用分散式微服務叢集。 到達服務端的請求執行緒數量達到一定的數量級別,都會時而有時而又無的發生共有資料區的 執行緒操作安全問題 。計算機 CPU 的非同步處理機制和分時間片的處理資料的方式決定著執行緒 安全問題的合理存在 。 同步鎖 SYNCRONIZED LOCK 的設計可以讓處理器的非同步資料處理 程式設計同步的方式。同步鎖會讓全域性資源的訪問執行緒排隊等待,一個一個執行緒一次獲取處理數 據的許可權 。 RETRAINEDLOCK 可以在任何的程式碼段加鎖和釋放鎖同步鎖 SYNCHRONIZED 的 操 代 碼 的時 SYNCHRONZED 加在方法修飾符之前預設使用靜態類的同步鎖。一個類可以有很多的例項, 例項 OBJECT 的生命週期由JAVA 虛擬機器接管 。同步鎖還有粒度更細的引數是欄位鎖,欄位 定義在類裡面,作用域比例項 OBJECT 要小。程式開發的作用域一般決定著大部分變數的生 JAVA 中 的 同 步 鎖 的 參 數 傳 遞 RETRAINEDLOCK 是受限制的基礎可重入同步鎖,使用方式沒有 SYNCHRONIZED 所定義的 那麼豐富。

計算機的底層硬體決定了鎖的不同提現方式。現實世界花花綠綠,有入口的門就要有鎖的存 在。現在有很多的密碼鎖,智慧鎖逐步在使用電子硬體繫結基礎應用的方式加強安全性。悲 觀鎖使用同步執行緒的方式保證資料安全,會把所有操作全域性資源的執行緒都同等處理。樂觀鎖 使用版本號機制更新資料,大量的操作執行緒使用版本號迭代區別對待。悲觀鎖鎖住時間,樂 觀鎖會有很多的記憶體開銷 。JAVA 虛擬機器伺服器端的堆 HEAP 的線程安全性基礎類解決方 式就是同步鎖 。 底層硬體暫存器 REGISTER 的指令操作方式也是隨機非同步 。 JAVA 使用 VOLITAILE 關鍵字對操作指令進行重排。VOLITAILE 保證暫存器全域性資料資源不同的操作指 令可見。全域性資料資源的資料可大可小,暫存器中的可運算元據並不是不可分割,不需要使 得資料保證原子效能 。操作指令也是儲存在暫存器中,使用 VOLITALE JAVA 中的關鍵字說 明非同步指令也在等待所有許可權去操作全域性資源。

JAVA 中有一種原子類比執行緒安全的資料結構處理資料量更小,可以作為多執行緒的操作變數 修飾符。AUTOMATICLONG AUTOMATIC INTEGER JDK1.8 之後新新增的執行緒安全原子類。 優先順序佇列 PRIORITYQUEUE, CONCURRENTHASHMAP, COPYONREADWRITEARRAYLIST 都是 JAVA API 中封裝好的執行緒安全資料結構。使用執行緒安全資料結構轉載資料方式安全可 靠 ,但是它的底層實現細節都遮蔽封裝不可見。

鎖的型別根據不同的定義有不同的實現。基礎概念鎖使用同步機制保證資料安全。公平鎖和 非公平鎖,互斥鎖, 自旋鎖,讀寫鎖,JAVA 中實現方式很多 。 多執行緒的非同步處理資料方式 會產生資料安全性,加鎖會產生一種死鎖異常現象。死鎖原因是鎖也是一種計算機執行資源, 鎖住的資料會被其它執行緒訪問。A 鎖操作 B 鎖中的資料,B 鎖操作 A 鎖中的資料,造成 A 鎖和 B 鎖中的資料程式設計不可以觸碰的狀態。死鎖的解決方式可以透過中間鎖處理,和 JAVA 中的迴圈依賴需要一箇中間依賴做交換,從而不會產生迴圈依賴引用。資料庫中也會有很多 的死鎖現象的存在。鎖的粒度有大有小,表鎖大一點行級鎖小一點,欄位鎖鎖住的就是表的 某個欄位。

相關文章