您好,登錄后才能下訂單哦!
java中鎖的概念是什么?相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
python常用的庫:1.requesuts;2.scrapy;3.pillow;4.twisted;5.numpy;6.matplotlib;7.pygama;8.ipyhton等。
一、鎖的概念及作用
鎖主要用來實現資源共享的同步。只有獲取到了鎖才能訪問該同步代碼,否則等待其他線程使用結束釋放鎖。
二、鎖的類型
這里主要針對:synchronize和Lock。
synchronize: 可以放在方法前面;也可以放在代碼塊前面,但需要指定上鎖的對象。通常和wait,notify,notifyAll一塊使用。wait:釋放占有的對象鎖,釋放CPU。 sleep:則是釋放CPU,但是不釋放占有的對象鎖。
notify:喚醒等待隊列中的一個線程,使其獲得鎖進行訪問。
notifyAll:喚醒等待隊列中等待該對象鎖的全部線程,讓其競爭去獲得鎖。
Lock:擁有synchronize相同的語義,但是添加一些其他特性,如中斷鎖等候和定時鎖等候,所以可以使用lock代替synchronize。提供的方法有:
lock():以阻塞式獲取鎖,沒有獲取到一直等待,不會被中斷。
tryLock(): 獲取一下,獲取到就返回true,沒獲取到就返回false。
tryLock(long timeout,TimeUnit unit):獲取到返回true,沒獲取到等待給定的時間,還沒獲取到就返回false。
lockInterruptibly() : 與lock類似,但是沒有獲取鎖會進入到休眠狀態,直到獲得鎖或者當前線程被別的線程中斷。
三、兩者的區別
性能不一致:資源競爭激勵的情況下,lock性能會比synchronize好,競爭不激勵的情況下,synchronize比lock性能好。
鎖機制不一樣:synchronize是在JVM層面實現的,系統會監控鎖的釋放與否。lock是代碼實現的,需要手動釋放,在finally塊中釋放。可以采用非阻塞的方式獲取鎖。
用法不一樣:synchronize可以用在代碼塊上,方法上。lock通過代碼實現,有更精確的線程語義。
看完上述內容,你們掌握java中鎖的概念是什么的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。