java各種鎖的使用場(chǎng)景 如何理解Java鎖的可重入性?
如何理解Java鎖的可重入性?可重入鎖ReentrantLock:允許亂詞進(jìn)入到的鎖,它來表示該鎖也能支持什么一個(gè)線程對(duì)資源的重復(fù)加鎖。sychnronized關(guān)鍵字隱式的支持重直接進(jìn)入,比如一個(gè)sy
如何理解Java鎖的可重入性?
可重入鎖ReentrantLock:允許亂詞進(jìn)入到的鎖,它來表示該鎖也能支持什么一個(gè)線程對(duì)資源的重復(fù)加鎖。
sychnronized關(guān)鍵字隱式的支持重直接進(jìn)入,比如一個(gè)sychnronized修飾的遞歸方法,在方法執(zhí)行時(shí),執(zhí)行線程在聲望兌換了鎖之后仍能連續(xù)過地某些該鎖。
ReentrantLock雖說沒能像sychnronized關(guān)鍵字一樣的隱式的重直接進(jìn)入,可是在調(diào)用lock()方法時(shí),也查看到鎖的線程,能夠立即全局函數(shù)lock()方法資源鎖而不被阻塞。
synchronized標(biāo)記的歌詞同步是要綁定一個(gè)對(duì)象的,不寫的話事實(shí)上實(shí)際上那是互斥鎖(this),即手機(jī)綁定當(dāng)前對(duì)象,這個(gè)this對(duì)象是鎖(synchronized中可以不其實(shí)就是監(jiān)視器),當(dāng)LoggingWidget不能執(zhí)行dosomething的時(shí)候完成任務(wù)了這把鎖(this),那就他去全局函數(shù)父類(Widget)的dosomthing的時(shí)候,父類的dosomething方法也要換取這個(gè)鎖(this),只不過子類的這個(gè)方法還還沒有運(yùn)行完畢,因此還所屬這個(gè)鎖,父類方法在等,子類不能量鎖還玩命的讓父類方法想執(zhí)行,卻到底父類方法在一臉期待的等下這個(gè)鎖,那樣就避免死鎖了······
java后端除了crud還有什么亮點(diǎn)?
基礎(chǔ):數(shù)據(jù)結(jié)構(gòu)、常用算法、數(shù)據(jù)庫調(diào)優(yōu)、網(wǎng)絡(luò)
Java:JVM調(diào)優(yōu)、JDK核心類的源碼、SSM框架源碼、多線程……
分布式:分布式鎖、分布式緩存、分布式配置、分布式事務(wù)、臨時(shí)限流、MQ、分庫分表、讀寫分離、ID生成器……
微服務(wù):注冊(cè)中心、配置中心、網(wǎng)關(guān)、被熔斷、日志收集、監(jiān)控預(yù)警、灰度發(fā)布……
java怎么避免死鎖?
1、最好就是在用tryLock(waytimeout,TimeUnit unit)的方法(ReentrantLock、ReentrantReadWriteLock),系統(tǒng)設(shè)置已超時(shí)時(shí)間,已超時(shí)也可以解盟能夠防止死鎖。
2、最好就是可以使用(jdk1.5以上)包的并發(fā)類能用手寫再控制并發(fā),都很常用的是ConcurrentHashMap、ConcurrentLinkedQueue、AtomicBoolean等等,實(shí)際應(yīng)用效果中極其沒有用,很簡(jiǎn)單方便啊且效率比使用Lock更高。
3、盡量會(huì)降低鎖的使用粒度,注意千萬不能幾個(gè)功能用同一把鎖。
4、注意減少同步的代碼塊。
百度搜索圈T社區(qū)能免費(fèi)行業(yè)視頻教程