欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

Synchronized鎖在Spring事務(wù)管理下

Synchronized鎖在Spring事務(wù)管理下?

先簡(jiǎn)單提示下,關(guān)于synchronized關(guān)鍵字,一定要慎用,非常影響性能。

首先說(shuō)明下,synchronized是Java中的關(guān)鍵字,是一種同步鎖。它修飾的對(duì)象有以下幾種:

1. 修飾一個(gè)代碼塊,被修飾的代碼塊稱為同步語(yǔ)句塊,其作用的范圍是大括號(hào){}括起來(lái)的代碼,作用的對(duì)象是調(diào)用這個(gè)代碼塊的對(duì)象;

2. 修飾一個(gè)方法,被修飾的方法稱為同步方法,其作用的范圍是整個(gè)方法,作用的對(duì)象是調(diào)用這個(gè)方法的對(duì)象;

3. 修改一個(gè)靜態(tài)的方法,其作用的范圍是整個(gè)靜態(tài)方法,作用的對(duì)象是這個(gè)類的所有對(duì)象;

4. 修改一個(gè)類,其作用的范圍是synchronized后面括號(hào)括起來(lái)的部分,作用主的對(duì)象是這個(gè)類的所有對(duì)象

我們?cè)俸?jiǎn)單的說(shuō)下spring的事務(wù)相關(guān)

Spring在不同的事務(wù)管理API之上定義了一個(gè)抽象層。而應(yīng)用程序開發(fā)人員不必了解底層的事務(wù)管理API,就可以使用Spring的事務(wù)管理機(jī)制。

Spring既支持https://www.52fb.cn式事務(wù)管理(也稱編碼式事務(wù)),也支持聲明式的事務(wù)管理

https://www.52fb.cn式事務(wù)管理:將事務(wù)管理代碼嵌入到業(yè)務(wù)方法中來(lái)控制事務(wù)的提交和回滾,在https://www.52fb.cn式事務(wù)中,必須在每個(gè)業(yè)務(wù)操作中包含額外的事務(wù)管理代碼

聲明式事務(wù)管理:大多數(shù)情況下比https://www.52fb.cn式事務(wù)管理更好用。它將事務(wù)管理代碼從業(yè)務(wù)方法中分離出來(lái),以聲明的方式來(lái)實(shí)現(xiàn)事務(wù)管理。事務(wù)管理作為一種橫切關(guān)注點(diǎn),可以通過(guò)AOP方法模塊化。Spring通過(guò)Spring AOP框架支持聲明式事務(wù)管理。

Spring并不直接管理事務(wù),而是提供了多種事務(wù)管理器,它們將事務(wù)管理的職責(zé)委托給JTA或其他持久化機(jī)制所提供的平臺(tái)相關(guān)的事務(wù)實(shí)現(xiàn)。每個(gè)事務(wù)管理器都會(huì)充當(dāng)某一特定平臺(tái)的事務(wù)實(shí)現(xiàn)的門面,這使得用戶在Spring中使用事務(wù)時(shí),幾乎不用關(guān)注實(shí)際的事務(wù)實(shí)現(xiàn)是什么。

spring的事務(wù)的具體配置方法這里就不贅述了。

在Spring中,聲明式事務(wù)是通過(guò)事務(wù)屬性來(lái)定義的,事務(wù)屬性描述了事務(wù)策略如何應(yīng)用到方法上。事務(wù)屬性包含了5個(gè)方面,盡管Spring提供了多種聲明式事務(wù)的機(jī)制,但是所有的方式都依賴這五個(gè)參數(shù)來(lái)控制如何管理事務(wù)策略。聲明式事務(wù)通過(guò)傳播行為,隔離級(jí)別,只讀提示,事務(wù)超時(shí)及回滾規(guī)則來(lái)進(jìn)行定義。

隔離級(jí)別定義了一個(gè)事務(wù)可能受其他并發(fā)事務(wù)影響的程度。在典型的應(yīng)用程序中,多個(gè)事務(wù)并發(fā)運(yùn)行,經(jīng)常會(huì)操作相同的數(shù)據(jù)來(lái)完成各自的任務(wù)。并發(fā),雖然是必須的,可是會(huì)導(dǎo)致下面的問(wèn)題。① 臟讀(Dirty reads):臟讀發(fā)生在一個(gè)事務(wù)讀取了另一個(gè)事務(wù)改寫但尚未提的數(shù)據(jù)時(shí)。如果改寫在稍后被回滾了,那么第一個(gè)事務(wù)獲取的數(shù)據(jù)就是無(wú)效的。

② 不可重復(fù)讀(Nonrepeatable read):不可重復(fù)讀發(fā)生在一個(gè)事務(wù)執(zhí)行相同的查詢兩次或兩次以上,但是每次都得到不同的數(shù)據(jù)時(shí)。這通常是因?yàn)榱硪粋€(gè)并發(fā)事務(wù)在兩次查詢期間更新了數(shù)據(jù)

③ 幻讀(Phantom read):幻讀與不可重復(fù)讀類似。它發(fā)生在一個(gè)事務(wù)(T1)讀取了幾行數(shù)據(jù),接著另一個(gè)并發(fā)事務(wù)(T2)插入了一些數(shù)據(jù)時(shí)。在隨后的查詢中,第一個(gè)事務(wù)(T1)就會(huì)發(fā)現(xiàn)多了一些原本不存在的記錄

Spring事務(wù)的底層是Spring AOP,而Spring AOP的底層是動(dòng)態(tài)代理技術(shù)

簡(jiǎn)單來(lái)說(shuō)就是在調(diào)用方法前開啟事務(wù),調(diào)用方法后提交事務(wù)。

在多線程環(huán)境下,就可能會(huì)出現(xiàn):方法執(zhí)行完了(synchronized代碼塊執(zhí)行完了),事務(wù)還沒(méi)提交,別的線程可以進(jìn)入被synchronized修飾的方法,再讀取的時(shí)候,讀到的是還沒(méi)提交事務(wù)的數(shù)據(jù),這個(gè)數(shù)據(jù)不是最新的,所以就出現(xiàn)了這個(gè)問(wèn)題。

從上面來(lái)看,問(wèn)題就是兩者同時(shí)使用時(shí),加鎖沒(méi)有包括整個(gè)事務(wù)。所以解決方法就是將synchronized的鎖加到整個(gè)spring事務(wù)上,就不會(huì)出現(xiàn)線程安全的問(wèn)題了。

最后,我會(huì)一直在頭條分享我的學(xué)習(xí)筆記,關(guān)注,點(diǎn)贊和轉(zhuǎn)發(fā)就是對(duì)我最大的支持。

java 線程 加鎖,Synchronized鎖在Spring事務(wù)管理下