做平臺交易網(wǎng)站怎么收款優(yōu)化網(wǎng)站教程
前言:
整理下學(xué)習(xí)筆記,打好基礎(chǔ),daydayup!!!
線程安全
多線程可以同時進(jìn)行操作,但如果是同時操作一個共享資源的時候,可能會出現(xiàn)業(yè)務(wù)安全問題。
?示例:
小A和小B共用一個賬戶,如果小A和小B同時取錢,誰能夠取走錢?
?在沒有線程安全的情況下,小A和小B都能夠取走錢,導(dǎo)致金額最終為負(fù)數(shù)。所以為了解決這一情況,就需要解決線程安全問題
線程同步
線程同步就是解決線程安全的方案
?線程同步的思想
讓多個線程先后依次訪問共享資源,解決線程安全問題
?線程同步的常見方案
使用加鎖的方式。每次只允許一個線程加鎖,加鎖后才能進(jìn)入訪問,訪問完畢后自動解鎖,然后其他線程才能再加鎖進(jìn)來
1,同步代碼塊
作用:把訪問共享資源的核心代碼給上鎖,以次保證線程安全。
格式:
synchronized(同步鎖){訪問共享資源的核心代碼
}
原理: 每次只允許一個線程加鎖后進(jìn)入,執(zhí)行完畢后自動解鎖,其他線程才可以進(jìn)來執(zhí)行。
示例:
注:對于當(dāng)前同時執(zhí)行的線程來講,必須是同一個對象執(zhí)行程序,否則會出想bug。
2,同步方法
作用:把訪問共享資源的核心方法給上鎖,以此保證線程安全
格式:
修飾符synchronized 返回值類型 方法名稱(形參列表){操作共享資源的代碼
}
?原理:每次只能一個線程進(jìn)入,執(zhí)行完畢以后自動解鎖,其他線程才可以進(jìn)來執(zhí)行
3,Lock鎖
Lock是接口,不能直接實例化,可以采用它的實現(xiàn)類ReentrantLock來構(gòu)建Lock鎖對象
格式:
private Lock 名稱 = new ReentrantLock();方法{
名稱.lock();需要加鎖的代碼名稱.unlock();}
示例:
總結(jié):?
同步代碼塊相對靈活,但代碼多時,可觀性較差;同步方法相對死板,但可觀性較好;Lock鎖相比前兩種方法更加靈活,但操作比前兩種更為復(fù)雜,可觀性較差。整理結(jié)束,撒花!!!