java關(guān)于并發(fā)模型中的兩種鎖知識點(diǎn)詳解
1、悲觀鎖
悲觀鎖假設(shè)最壞的情況(如果果你不鎖門,那么搗蛋鬼就會闖入并搞得一團(tuán)糟),只有在確保其他線程不受干擾(獲得正確的鎖)的情況下才能執(zhí)行。
一般實(shí)現(xiàn)如獨(dú)占鎖等。
安全性更高,但中低并發(fā)性效率更低。
2、樂觀鎖
樂觀鎖通過沖突檢查機(jī)制判斷更新過程中是否存在其他線程干擾。如果存在,操作將失敗,重試(也可以不重試)。
CAS等常見實(shí)現(xiàn)。
一些樂觀鎖削弱了一致性,但在中低并發(fā)性下效率大大提高。
知識點(diǎn)擴(kuò)展:
并行與分布式編程
關(guān)注的是復(fù)雜軟件系統(tǒng)的構(gòu)造,“復(fù)雜”是指多線程、分布式與GUI程序
在鎖與同步這一節(jié)中,詳細(xì)介紹了如何設(shè)計線程安全的ADT
并發(fā)
在我們的并發(fā)介紹中,我們看到了兩種并發(fā)編程模型:共享內(nèi)存和消息傳遞。
• 在共享內(nèi)存模型中 :并發(fā)模塊通過在內(nèi)存中讀取和寫入共享可變對象來進(jìn)行交互。在單個Java進(jìn)程中創(chuàng)建多個線程是我們共享內(nèi)存并發(fā)的主要示例。
• 在消息傳遞模型中:并發(fā)模塊通過通信通道相互發(fā)送不可變消息進(jìn)行交互。該通信通道可以通過網(wǎng)絡(luò)連接不同的計算機(jī),如我們的一些初始示例:Web瀏覽,即時消息等。
鎖
對于鎖,這是Java語言提供的內(nèi)嵌機(jī)制,每個Object都有相關(guān)聯(lián)的lock;
首先來了解一下java鎖的相關(guān)概念
Java的內(nèi)置鎖:每個java對象都可以用做一個實(shí)現(xiàn)同步的鎖,這些鎖成為內(nèi)置鎖。線程進(jìn)入同步代碼塊或者代碼方法的時候會自動獲得該鎖,在退出同步代碼塊或者方法的時候則會釋放該鎖。獲得內(nèi)置鎖的唯一途徑就是進(jìn)入這個鎖的保護(hù)的同步代碼塊或者方法。
Java內(nèi)置鎖是一個互斥鎖:就是最多一個程序能夠得到這個鎖。當(dāng)多個線程想要對某個mutable類型的ADT操作時,就是修改它的值時,鎖能夠劫持這些線程的操作,阻塞他們,只有之前的線程結(jié)束調(diào)用時,釋放這個鎖,后面的線程才能獲得該鎖,否則一直等待下去。
用法
同步和鎖:阻止了多線程在同一時間內(nèi)對可變數(shù)據(jù)的共享操作,即程序員來負(fù)責(zé)多線程之間對mutable數(shù)據(jù)的共享操作,通過”同步”策略,避免多線程同時訪問數(shù)據(jù),使用鎖機(jī)制,獲取對數(shù)據(jù)的獨(dú)家mutation權(quán),其他線程被阻塞,不得訪問,即不可修改。
Java同步鎖實(shí)現(xiàn)方法
synchronized 關(guān)鍵詞修飾
wait、notify、notifyAll的使用
相關(guān)文章
Java?超詳細(xì)講解Spring?MVC異常處理機(jī)制
Spring?MVC中提供了一個通用的異常處理機(jī)制,它提供了一個成熟、簡潔并且清晰的異常處理方案。當(dāng)使用Spring?MVC開發(fā)Web應(yīng)用時,利用這套現(xiàn)成的機(jī)制進(jìn)行異常處理也更加自然并且高效2022-04-04
Java設(shè)置PDF跨頁表格重復(fù)顯示表頭行的步驟詳解
這篇文章主要給大家介紹了關(guān)于Java設(shè)置PDF跨頁表格重復(fù)顯示表頭行的相關(guān)資料,這里使用的是Free Spire.PDF for Java的jar包,Spire.PDF for Java 是一款專門對 PDF 文檔進(jìn)行操作的 Java 類庫,需要的朋友可以參考下2021-07-07
Spring Boot 使用WebAsyncTask異步返回結(jié)果
這篇文章主要介紹了Spring Boot 使用WebAsyncTask異步返回結(jié)果的相關(guān)資料,需要的朋友可以參考下2018-02-02
Springboot pom項目間接依賴包版本與預(yù)期不符原因解決分析
這篇文章主要介紹了Springboot pom項目間接依賴包版本與預(yù)期不符原因解決分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08
詳解Spring Data操作Redis數(shù)據(jù)庫
Redis是一種NOSQL數(shù)據(jù)庫,Key-Value形式對數(shù)據(jù)進(jìn)行存儲,其中數(shù)據(jù)可以以內(nèi)存形式存在,也可以持久化到文件系統(tǒng)。Spring data對Redis進(jìn)行了很好的封裝,用起來也是十分的得心應(yīng)手,接下來通過本文給大家分享Spring Data操作Redis數(shù)據(jù)庫,需要的朋友參考下2017-03-03
Java中String類常用類型實(shí)例總結(jié)
在我們開發(fā)中經(jīng)常會用到很多的常用的工具類,這里做一個總結(jié),下面這篇文章主要給大家介紹了關(guān)于Java中String類常用類型的相關(guān)資料,String類代表字符串,需要的朋友可以參考下2021-12-12

