溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Java中鎖的面試題實(shí)例分析

發(fā)布時(shí)間:2022-06-01 15:58:21 來源:億速云 閱讀:154 作者:iii 欄目:大數(shù)據(jù)

這篇文章主要講解了“Java中鎖的面試題實(shí)例分析”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“Java中鎖的面試題實(shí)例分析”吧!

1.synchronized作用于靜態(tài)方法和非靜態(tài)方法的區(qū)別

非靜態(tài)方法:

給對象加鎖(可以理解為給這個(gè)對象的內(nèi)存上鎖,注意 只是這塊內(nèi)存,其他同類對象都會(huì)有各自的內(nèi)存鎖),這時(shí)候在其他一個(gè)以上線程中執(zhí)行該對象的這個(gè)同步方法(注意:是該對象)就會(huì)產(chǎn)生互斥

靜態(tài)方法: 相當(dāng)于在類上加鎖(*.class位于代碼區(qū),靜態(tài)方法位于靜態(tài)區(qū)域,這個(gè)類產(chǎn)生的對象公用這個(gè)靜態(tài)方法,所以這塊內(nèi)存,N個(gè)對象來競爭),

這時(shí)候,只要是這個(gè)類產(chǎn)生的對象,在調(diào)用這個(gè)靜態(tài)方法時(shí)都會(huì)產(chǎn)生互斥。即該類所有的對象都共享一把鎖。

2.鎖類型有哪些

(1)樂觀鎖&悲觀鎖

(2)自旋鎖&非自旋鎖

(3)可重入鎖&不可重入鎖

(4)無鎖&輕量級鎖&偏向鎖&重量級鎖

(5)互斥鎖&共享鎖

(6)公平鎖&非公平鎖

3.線程同步的幾種方式

synchronized修飾

volatile實(shí)現(xiàn)同步(只能保證可見性,不能保證原子性)

使用局部變量ThreadLocal

使用原子類(AtomicInteger、AtomicBoolean……)

使用Lock

使用容器類(BlockingQueue、ConcurrentHashMap)

4.synchronized 和 lock 機(jī)制區(qū)別

synchronized 原始采用的是 CPU 悲觀鎖機(jī)制,即線程獲得的是獨(dú)占鎖。獨(dú)占鎖意味著其 他線程只能依靠阻塞來等待線程釋放鎖。

Lock 用的是樂觀鎖方式。所謂樂觀鎖就是,每次不加鎖而是假設(shè)沒有沖突而去完成某項(xiàng)操作,如果因?yàn)闆_突失敗就重試,直到成功為止。樂觀鎖實(shí)現(xiàn)的機(jī)制就是 CAS 操作(Compare and Swap)。

5.說說線程安全的問題

線程安全是多線程領(lǐng)域的問題,線程安全可以簡單理解為一個(gè)方法或者一個(gè)實(shí)例可以在多線程環(huán)境中使用而不會(huì)出現(xiàn)問題。

 Java 多線程編程當(dāng)中,提供了多種實(shí)現(xiàn) Java 線程安全的方式:

最簡單的方式,使用 Synchronization 關(guān)鍵字

使用 java.util.concurrent.atomic 包中的原子類,例如 AtomicInteger

使用 java.util.concurrent.locks 包中的鎖

使用線程安全的集合 ConcurrentHashMap

使用 volatile關(guān)鍵字,保證變量可見性

感謝各位的閱讀,以上就是“Java中鎖的面試題實(shí)例分析”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對Java中鎖的面試題實(shí)例分析這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識點(diǎn)的文章,歡迎關(guān)注!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI