本文目錄一覽:
- 1、java中多線程的鎖是什麼概念?誰能一言以蔽之
- 2、怎麼處理JAVA多線程死鎖問題?
- 3、java 程序中怎麼保證多線程的運行安全?
- 4、JAVA多線程中“鎖”的概念的理解
- 5、Java多線程中,鎖是什麼,所謂的獲取鎖是什麼意思
java中多線程的鎖是什麼概念?誰能一言以蔽之
假設
你銀行賬戶上有1000元錢
你老婆拿銀行卡去ATM機上去取這1000元錢
銀行數據庫系統先確認你的賬戶上有這1000元
然後,銀行拿錢給你老婆
當你老婆拿到錢,並且銀行數據庫正要從你的賬戶上扣除這·1000元錢還沒執行的時候,
你到銀行櫃檯拿着存摺去取1000元,
因為這時你老婆雖然拿到錢,但銀行數據庫還沒有從你賬戶上扣除,你賬戶上依然有着1000元
所以,銀行櫃檯確認你賬戶上有1000元,
so……你的銀行賬戶有隻有1000元,但只要你時機拿捏得當,你就能從該死的銀行那裡取到2000元。
之所以能發生這種事情,是因為有兩個線程同時訪問同一個數據,造成混亂。
鎖,
它的功能就是保證只有一個線程訪問一個數據。
怎麼處理JAVA多線程死鎖問題?
有兩種實現方法,分別是繼承Thread類與實現Runnable
接口
用synchronized關鍵字修飾同步方法
反對使用stop(),是因為它不安全。它會解除由線程獲取的所有鎖定,而且如果對象處於一種不連貫狀態,那麼
其他線程能在那種狀態下檢查和修改它們。結果很難檢查出真正的問題所在。suspend()方法容易發生死鎖。調用
suspend()的時候,目標線程會停下來,但卻仍然持有在這之前獲得的鎖定。此時,其他任何線程都不能訪問鎖定
的資源,除非被”掛起”的線程恢復運行。對任何線程來說,如果它們想恢複目標線程,同時又試圖使用任何一個
鎖定的資源,就會造成死鎖。所以不應該使用suspend(),而應在自己的Thread類中置入一個標誌,指出線程應該
活動還是掛起。若標誌指出線程應該掛起,便用wait()命其進入等待狀態。若標誌指出線程應當恢復,則用一個
notify()重新啟動線程。
java 程序中怎麼保證多線程的運行安全?
2.1.讀一致性
Java 中針對上述“讀不安全”的問題提供了關鍵字 volatile 來解決問題,被 volatile 修飾的成員變量,在內容發生更改的時候,會通知所有線程去主內存更新最新的值,這樣就解決了讀不安全的問題,實現了讀一致性。
但是,讀一致性是無法解決寫一致性的,雖然能夠使得每個線程都能及時獲取到最新的值,但是1.1中的寫一致性問題還是會存在。
既然如此,Java 為啥還要提供 volatile 關鍵字呢?這並非多餘的存在,在某些場景下只需要讀一致性的話,這個關鍵字就能夠滿足需求而且性能相對還不錯,因為其他的能夠保證“讀寫”都一直的辦法,多多少少存在一些犧牲。
2.2.寫一致性
Java 提供了三種方式來保證讀寫一致性,分別是互斥鎖、自旋鎖、線程隔離。
2.2.1.互斥鎖
互斥鎖只是一個鎖概念,在其他場景也叫做獨佔鎖、悲觀鎖等,其實就是一個意思。它是指線程之間是互斥的,某一個線程獲取了某個資源的鎖,那麼其他線程就只能睡眠等待。
在 Java 中互斥鎖的實現一般叫做同步線程鎖,關鍵字 synchronized,它鎖住的範圍是它修飾的作用域,鎖住的對象是:當前對象(對象鎖)或類的全部對象(類鎖)——鎖釋放前,其他線程必將阻塞,保證鎖住範圍內的操作是原子性的,而且讀取的數據不存在一致性問題。
對象鎖:當它修飾方法、代碼塊時,將會鎖住當前對象
類鎖:修飾類、靜態方法時,則是鎖住類的所有對象
注意: 鎖住的永遠是對象,鎖住的範圍永遠是 synchronized 關鍵字後面的花括號劃定的代碼域。
2.2.2.自旋鎖
自旋鎖也只是一個鎖概念,在其他場景也叫做樂觀鎖等。
自旋鎖本質上是不加鎖,而是通過對比舊數據來決定是否更新:
JAVA多線程中“鎖”的概念的理解
當有多個線程共用一種臨界資源的時候,便會出現衝突,鎖就是用來解決這種衝突的,跟上廁所一樣,假如有ABC三個人都來上廁所而廁所只有一個一次只能進一人,A先來了,那麼在A出來之前,這個廁所就處在了“鎖”定狀態,B和C憋死也要在外面等着,直到A出門(原因很多,如睡著了,方便完了,忘帶廁紙了跑出來找人要….)“鎖”定解除B和C才能進入,當然牛逼的進(A和B有一腿只讓B進或者優先級高或者…),SB的在外面繼續等。此乃吾理解之鎖定,希望能夠對你有所幫助
Java多線程中,鎖是什麼,所謂的獲取鎖是什麼意思
簡單的跟你講一下,當有多個線程使用同一個資源的時候,為了避免死鎖,往往在一個線程在使用一個資源的時候給這段代碼一個鎖(也就是說我在操作的時候別人都不能動),在執行完後再把這個鎖放開(這時候別的線程就可以使用該資源了)。
原創文章,作者:WSAJ,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/146790.html