您好,登錄后才能下訂單哦!
這篇文章主要介紹Java中關于鎖的面試題有哪些,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
Java中的集合主要分為四類:1、List列表:有序的,可重復的;2、Queue隊列:有序,可重復的;3、Set集合:不可重復;4、Map映射:無序,鍵唯一,值不唯一。
1.synchronized作用于靜態方法和非靜態方法的區別
非靜態方法:
給對象加鎖(可以理解為給這個對象的內存上鎖,注意 只是這塊內存,其他同類對象都會有各自的內存鎖),這時候在其他一個以上線程中執行該對象的這個同步方法(注意:是該對象)就會產生互斥
靜態方法: 相當于在類上加鎖(*.class位于代碼區,靜態方法位于靜態區域,這個類產生的對象公用這個靜態方法,所以這塊內存,N個對象來競爭),
這時候,只要是這個類產生的對象,在調用這個靜態方法時都會產生互斥。即該類所有的對象都共享一把鎖。
2.鎖類型有哪些
(1)樂觀鎖&悲觀鎖
(2)自旋鎖&非自旋鎖
(3)可重入鎖&不可重入鎖
(4)無鎖&輕量級鎖&偏向鎖&重量級鎖
(5)互斥鎖&共享鎖
(6)公平鎖&非公平鎖
3.線程同步的幾種方式
synchronized修飾
volatile實現同步(只能保證可見性,不能保證原子性)
使用局部變量ThreadLocal
使用原子類(AtomicInteger、AtomicBoolean……)
使用Lock
使用容器類(BlockingQueue、ConcurrentHashMap)
4.synchronized 和 lock 機制區別
synchronized 原始采用的是 CPU 悲觀鎖機制,即線程獲得的是獨占鎖。獨占鎖意味著其 他線程只能依靠阻塞來等待線程釋放鎖。
Lock 用的是樂觀鎖方式。所謂樂觀鎖就是,每次不加鎖而是假設沒有沖突而去完成某項操作,如果因為沖突失敗就重試,直到成功為止。樂觀鎖實現的機制就是 CAS 操作(Compare and Swap)。
5.說說線程安全的問題
線程安全是多線程領域的問題,線程安全可以簡單理解為一個方法或者一個實例可以在多線程環境中使用而不會出現問題。
在 Java 多線程編程當中,提供了多種實現 Java 線程安全的方式:
最簡單的方式,使用 Synchronization 關鍵字
使用 java.util.concurrent.atomic 包中的原子類,例如 AtomicInteger
使用 java.util.concurrent.locks 包中的鎖
使用線程安全的集合 ConcurrentHashMap
使用 volatile關鍵字,保證變量可見性
以上是“Java中關于鎖的面試題有哪些”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。