日本有码中文字幕视频,在线能看三级网站,日本妇乱子伦视频免费的,中文字幕一页在线

      首頁生活>內(nèi)容

      synchronized和lock的區(qū)別和使用場景

      時(shí)間:2022-09-09 15:32:07來源:
      導(dǎo)讀您好,現(xiàn)在漢格來為大家解答以上的問題。synchronized和lock的區(qū)別和使用場景相信很多小伙伴還不知道,現(xiàn)在讓我們一起來看看吧!1、總的來說...

      您好,現(xiàn)在漢格來為大家解答以上的問題。synchronized和lock的區(qū)別和使用場景相信很多小伙伴還不知道,現(xiàn)在讓我們一起來看看吧!

      1、總的來說,lock更加靈活。

      2、主要相同點(diǎn):Lock能完成synchronized所實(shí)現(xiàn)的所有功能不同: 1.ReentrantLock功能性方面更全面,比如時(shí)間鎖等候,可中斷鎖等候,鎖投票等,因此更有擴(kuò)展性。

      3、在多個(gè)條件變量和高度競爭鎖的地方,用ReentrantLock更合適,ReentrantLock還提供了Condition,對線程的等待和喚醒等操作更加靈活,一個(gè)ReentrantLock可以有多個(gè)Condition實(shí)例,所以更有擴(kuò)展性。

      4、 2.ReentrantLock必須在finally中釋放鎖,否則后果很嚴(yán)重,編碼角度來說使用synchronized更加簡單,不容易遺漏或者出錯(cuò)。

      5、 3.ReentrantLock 的性能比synchronized會(huì)好點(diǎn)。

      6、 4.ReentrantLock提供了可輪詢的鎖請求,他可以嘗試的去取得鎖,如果取得成功則繼續(xù)處理,取得不成功,可以等下次運(yùn)行的時(shí)候處理,所以不容易產(chǎn)生死鎖,而synchronized則一旦進(jìn)入鎖請求要么成功,要么一直阻塞,所以更容易產(chǎn)生死鎖。

      7、 轉(zhuǎn)載:ReentrantLock 擁有Synchronized相同的并發(fā)性和內(nèi)存語義,此外還多了 鎖投票,定時(shí)鎖等候和中斷鎖等候 線程A和B都要獲取對象O的鎖定,假設(shè)A獲取了對象O鎖,B將等待A釋放對O的鎖定, 如果使用 synchronized ,如果A不釋放,B將一直等下去,不能被中斷 如果 使用ReentrantLock,如果A不釋放,可以使B在等待了足夠長的時(shí)間以后,中斷等待,而干別的事情 ReentrantLock獲取鎖定與三種方式: a) lock(), 如果獲取了鎖立即返回,如果別的線程持有鎖,當(dāng)前線程則一直處于休眠狀態(tài),直到獲取鎖 b) tryLock(), 如果獲取了鎖立即返回true,如果別的線程正持有鎖,立即返回false; c) tryLock (long timeout, TimeUnit unit), 如果獲取了鎖定立即返回true,如果別的線程正持有鎖,會(huì)等待參數(shù)給定的時(shí)間,在等待的過程中,如果獲取了鎖定,就返回true,如果等待超時(shí),返回false; d) lockInterruptibly:如果獲取了鎖定立即返回,如果沒有獲取鎖定,當(dāng)前線程處于休眠狀態(tài),直到或者鎖定,或者當(dāng)前線程被別的線程中斷2、synchronized是在JVM層面上實(shí)現(xiàn)的,不但可以通過一些監(jiān)控工具監(jiān)控synchronized的鎖定,而且在代碼執(zhí)行時(shí)出現(xiàn)異常,JVM會(huì)自動(dòng)釋放鎖定,但是使用Lock則不行,lock是通過代碼實(shí)現(xiàn)的,要保證鎖定一定會(huì)被釋放,就必須將 unLock()放到finally{} 中3、在資源競爭不是很激烈的情況下,Synchronized的性能要優(yōu)于ReetrantLock,但是在資源競爭很激烈的情況下,Synchronized的性能會(huì)下降幾十倍,但是ReetrantLock的性能能維持常態(tài);。

      本文就為大家分享到這里,希望小伙伴們會(huì)喜歡。

      標(biāo)簽:
      最新文章