農林漁牧網

您現在的位置是:首頁 > 畜牧業

執行緒安全與鎖的使用

2022-11-29由 開源favorer 發表于 畜牧業

組合語言中cwd是什麼意思

我們知道,JAVA是一個面向物件程式設計的語言,這大大降低了軟體開發的難度並提升了可以實現的複雜規模度,但人們可能難以想見被封裝起來的過程處理中不停地中斷和狀態切換,物件的屬性和值可能中間不停被修改和變髒,因此,一個編譯良好的程式其實可能隱藏著嚴重的執行緒安全問題。

執行緒安全

定義:當多個物件同時操作一個物件時,不用考慮執行緒在執行時環境下的執行順序和排程問題,也無需考慮值同步問題,始終能獲取到正確的結果,我們就稱這個物件為執行緒安全。

要保證絕對的執行緒安全並不容易,在之前的章節我們講到,需要滿足原子性、有序性、可見性,我們能最直觀的想到,透過final修飾的物件一定是執行緒安全的。但是這樣的絕對執行緒安全是沒有意義的,他不能進解決任何問題,因此,我們在工作中和麵試中討論執行緒安全時,其實講得是相對執行緒安全。

什麼是相對執行緒安全?就是將執行緒安全的定義弱化,允許在物件外的呼叫過程中進行控制和同步,使之達到邏輯正確的狀態。例如,java。util。vector我們通常說他是一個執行緒安全的物件,這是因為他的add()、get()、size()等方法都被synchronized修飾,但看每一個方法,確實是執行緒安全的。但如果我們多個執行緒同時使用get()和remove() 進行遍歷時,就可能會出現array index out of range的越界問題,因此我們需要把這兩個呼叫聯合起來進行一定的補償動作,才能達到執行緒安全。

執行緒安全與鎖的使用