面試題:
你對java中的鎖有所了解么?鎖有哪幾種?它們有什么區(qū)別?你來說一下。
(學習視頻分享:java視頻教程)
解答:
立即學習“Java免費學習筆記(深入)”;
大致可以分為這幾點:鎖是什么,有什么用,有哪幾種鎖,鎖的區(qū)別。
一:鎖是什么,有什么用?
鎖主要用來實現(xiàn)資源共享的同步。只有獲取到了鎖才能訪問該同步代碼,否則等待其他線程使用結(jié)束釋放鎖。
二:有哪幾種鎖?
這里主要針對: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類似,但是沒有獲取鎖會進入到休眠狀態(tài),直到獲得鎖或者當前線程被別的線程中斷。
三:兩者的區(qū)別?
性能不一致:資源競爭激勵的情況下,lock性能會比synchronize好,競爭不激勵的情況下,synchronize比lock性能好。
鎖機制不一樣:synchronize是在JVM層面實現(xiàn)的,系統(tǒng)會監(jiān)控鎖的釋放與否。lock是代碼實現(xiàn)的,需要手動釋放,在finally塊中釋放。可以采用非阻塞的方式獲取鎖。
用法不一樣:synchronize可以用在代碼塊上,方法上。lock通過代碼實現(xiàn),有更精確的線程語義。
相關推薦:java入門教程
以上就是java面試——鎖的詳細內(nèi)容,更多請關注php中文網(wǎng)其它相關文章!
java怎么學習?java怎么入門?java在哪學?java怎么學才快?不用擔心,這里為大家提供了java速學教程(入門到精通),有需要的小伙伴保存下載就能學習啦!
Copyright 2014-2025 http://www.miracleart.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號