首頁  >  文章  >  Java  >  java面試——鎖

java面試——鎖

王林
王林轉載
2021-01-04 17:32:273394瀏覽

java面試——鎖

面試題:

#你對java中的鎖定有所了解?鎖有哪幾種?它們有什麼區別?你來說一下。

(學習影片分享:java影片教學

#:

##大致可以分成這幾點:鎖是什麼,有什麼用,有哪幾種鎖,鎖的差別。

一:

鎖定是什麼,有什麼用

鎖定主要用來實現資源共享的同步。只有取得到了鎖才能存取該同步程式碼,否則等待其他執行緒使用結束釋放鎖。

二:

有哪幾種鎖?

這裡主要針對:synchronize和Lock(因為面試就是問這兩個)。

synchronize: 可以放在方法前面;也可以放在程式碼區塊前面,但需要指定上鎖的物件。通常和wait,notify,notifyAll一塊使用。 wait:釋放佔有的物件鎖定,釋放CPU。 sleep:則是釋放CPU,但是不釋放佔有的物件鎖定。

notify:喚醒等待佇列中的一個線程,使其獲得鎖定進行存取。

notifyAll:喚醒等待佇列中等待該物件鎖定的全部線程,讓其競爭去獲得鎖定。

Lock:擁有與synchronize相同的語義,但是添加一些其他特性,如##中斷鎖等候和定時鎖定等候,所以可以使用lock代替synchronize。提供的方法有:

(更多相關面試題推薦:java面試題目及答案

#lock():以阻塞式取得鎖,沒有取得到一直等待,不會中斷。

tryLock(): 取得一下,取得到就回傳true,沒取得到就回傳false。

tryLock(long timeout,TimeUnit unit):取得到回傳true,沒取得到等待給定的時間,還沒取得到就返回false。

lockInterruptibly() : 與lock類似,但沒有取得鎖定會進入到休眠狀態,直到取得鎖定或目前執行緒被別的線程中斷。

三:

兩者的差別?

效能不一致:資源競爭激勵的情況下,lock效能會比synchronize好,競爭不激勵的情況下,synchronize比lock效能好。

鎖定機制不一樣:synchronize是在JVM層面實現的,系統會監控鎖的釋放與否。 lock是程式碼實現的,需要手動釋放,在finally區塊中釋放。可以採用非阻塞的方式取得鎖。 用法不一樣:synchronize可以用在程式碼區塊上,方法上。 lock透過程式碼實現,有更精確的線程語義。

#########相關推薦:###java入門教學##########

以上是java面試——鎖的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:csdn.net。如有侵權,請聯絡admin@php.cn刪除