lock同步鎖如何在Java項(xiàng)目中使用?相信很多沒有經(jīng)驗(yàn)的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個(gè)問題。
成都網(wǎng)站制作,成都營銷型網(wǎng)站-創(chuàng)新互聯(lián)建站科技公司專注營銷型網(wǎng)站建設(shè)及定制型網(wǎng)站開發(fā)。致力為您建設(shè)最有價(jià)值的網(wǎng)站,服務(wù)熱線:028-86922220。
1)Lock是一個(gè)接口,而synchronized是Java中的關(guān)鍵字,synchronized是內(nèi)置的語言實(shí)現(xiàn),synchronized是在JVM層面上實(shí)現(xiàn)的,不但可以通過一些監(jiān)控工具監(jiān)控synchronized的鎖定,而且在代碼執(zhí)行時(shí)出現(xiàn)異常,JVM會自動釋放鎖定,但是使用Lock則不行,lock是通過代碼實(shí)現(xiàn)的,要保證鎖定一定會被釋放,就必須將 unLock()放到finally{} 中;
2)synchronized在發(fā)生異常時(shí),會自動釋放線程占有的鎖,因此不會導(dǎo)致死鎖現(xiàn)象發(fā)生;而Lock在發(fā)生異常時(shí),如果沒有主動通過unLock()去釋放鎖,則很可能造成死鎖現(xiàn)象,因此使用Lock時(shí)需要在finally塊中釋放鎖;
3)Lock可以讓等待鎖的線程響應(yīng)中斷,線程可以中斷去干別的事務(wù),而synchronized卻不行,使用synchronized時(shí),等待的線程會一直等待下去,不能夠響應(yīng)中斷;
4)通過Lock可以知道有沒有成功獲取鎖,而synchronized卻無法辦到。
5)Lock可以提高多個(gè)線程進(jìn)行讀操作的效率。
在性能上來說,如果競爭資源不激烈,兩者的性能是差不多的,而當(dāng)競爭資源非常激烈時(shí)(即有大量線程同時(shí)競爭),此時(shí)Lock的性能要遠(yuǎn)遠(yuǎn)優(yōu)于synchronized。所以說,在具體使用時(shí)要根據(jù)適當(dāng)情況選擇。
package lock; /* 方式三: Lock鎖 synchronized和lock的不同 1.sychronized在執(zhí)行完相應(yīng)代碼塊以后屬于自動釋放同步監(jiān)視器,lock需要手動啟動同步 建議優(yōu)先使用lock->同步方法塊->同步方法(在方法體之外) 實(shí)現(xiàn)Runnable對象被三個(gè)線程調(diào)用,然后這個(gè)對象的run方法里貢獻(xiàn)資源操作器被lock上鎖了 @author zsben @create 2020-01-03 23:55 */ import java.util.concurrent.locks.ReentrantLock; class Window implements Runnable{ private int ticket = 100; //1.實(shí)例化lock private ReentrantLock lock = new ReentrantLock(true);//fair=true:公平鎖,線程先來后到 @Override public void run() { while(true){ try{ //2.調(diào)用lock方法 lock.lock(); if(ticket>0){ try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName()+": "+ticket); ticket--; }else break; } finally { //3.調(diào)用解鎖方法 lock.unlock(); } } } } public class LockTest { public static void main(String[] args) { Window w = new Window(); Thread t1 = new Thread(w); Thread t2 = new Thread(w); Thread t3 = new Thread(w); t1.start(); t2.start(); t3.start(); } }
看完上述內(nèi)容,你們掌握 lock同步鎖如何在Java項(xiàng)目中使用的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!
本文名稱:lock同步鎖如何在Java項(xiàng)目中使用
轉(zhuǎn)載來源:http://bm7419.com/article46/jciihg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信公眾號、品牌網(wǎng)站設(shè)計(jì)、外貿(mào)網(wǎng)站建設(shè)、網(wǎng)站導(dǎo)航、外貿(mào)建站、關(guān)鍵詞優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)