关于java中锁的面试题_Java面试题-Java中的锁
1. 如何實(shí)現(xiàn)樂觀鎖(CAS)?如何避免ABA問題?
答:1)讀取內(nèi)存值的方式實(shí)現(xiàn)了樂觀鎖(比如:SVN系統(tǒng)),方法:第一,比較內(nèi)存值和期望值;第二,替換內(nèi)存值為要替換值。
2)帶參數(shù)版本來避免aba問題,在讀取和替換的時(shí)候進(jìn)行判定版本是否一致
2. 讀寫鎖可以用于什么應(yīng)用場景?
答:?讀寫鎖可以用于 “多讀少寫” 的場景,讀寫鎖支持多個(gè)讀操作并發(fā)執(zhí)行,寫操作只能由一個(gè)線程來操作
ReadWriteLock對向數(shù)據(jù)結(jié)構(gòu)相對不頻繁地寫入,但是有多個(gè)任務(wù)要經(jīng)常讀取這個(gè)數(shù)據(jù)結(jié)構(gòu)的這類情況進(jìn)行了優(yōu)化。ReadWriteLock使得你可以同事有多個(gè)讀取者,只要它們都不試圖寫入即可。如果寫鎖已經(jīng)被其他任務(wù)持有,那么任何讀取者都不能訪問,直至這個(gè)寫鎖被釋放為止。
ReadWriteLock 對程序心性能的提高受制于如下幾個(gè)因素也還有其他等等的因素。
1)數(shù)據(jù)被讀取的頻率與被修改的頻率相比較的結(jié)果。
2)讀取和寫入的時(shí)間
3)有多少線程競爭
4)是否在多處理機(jī)器上運(yùn)行
3. 什么時(shí)候應(yīng)該使用可重入鎖?
答:重入鎖指的是在某一個(gè)線程中可以多次獲得同一把鎖,在線程中多次操作有鎖的方法。
4. 什么場景下可以使用volatile替換synchronized?
答:?只需要保證共享資源的可見性的時(shí)候可以使用volatile替代,synchronized保證可操作的原子性一致性和可見性。volatile適用于新值不依賴于就值的情形。
volatile是java提供的一種同步手段,只不過它是輕量級的同步,為什么這么說,因?yàn)関olatile只能保證多線程的內(nèi)存可見性,不能保證多線 程的執(zhí)行有序性。而最徹底的同步要保證有序性和可見性,例如synchronized。任何被volatile修飾的變量,都不拷貝副本到工作內(nèi)存,任何 修改都及時(shí)寫在主存。因此對于Valatile修飾的變量的修改,所有線程馬上就能看到,但是volatile不能保證對變量的修改是有序的。volatile存在的意義是,任何線程對某個(gè)變量的修改,都會(huì)馬上被其他線程讀取到,因?yàn)橹苯硬僮髦鞔?#xff0c; 沒有線程對工作內(nèi)存和主存的同步。所以,volatile的使用場景是有限的,在有限的一些情形下可以使用 volatile 變量替代鎖(synchronized)。
要使 volatile 變量提供理想的線程安全,必須同時(shí)滿足下面兩個(gè)條件:
1)對 變量的寫操作不依賴于當(dāng)前值。
2)該變量沒有包含在具有其他變量的不變式中
總結(jié)
以上是生活随笔為你收集整理的关于java中锁的面试题_Java面试题-Java中的锁的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php猴子找大王算法,教程方法;php实
- 下一篇: vscode php插件_JS之 提高开