面試題:
#你對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中文網其他相關文章!