同步代碼塊是指用“ {}”括起來的一段代碼,根據(jù)其位置和聲明可以分為普通代碼塊,構(gòu)造塊,靜態(tài)塊和同步代碼塊。如果在代碼塊之前添加synced關(guān)鍵字,則代碼塊將稱為同步代碼塊。那么如何利用同步代碼塊解決數(shù)據(jù)安全問題?同步執(zhí)行中的線程將不會釋放鎖,直到執(zhí)行完成為止,同步之外的線程也不會鎖定。同時確保同步期間只有一個線程可以執(zhí)行共享數(shù)據(jù),從而確保安全性;程序經(jīng)常判斷鎖,獲取鎖,釋放鎖,這樣就會降低程序的效率。
一、同步代碼塊
synchronized關(guān)鍵字可以用于方法中的某個區(qū)塊中,表示只對這個區(qū)塊這個區(qū)塊的資源實現(xiàn)互斥訪問:賣票案例出現(xiàn)了線程安全問題;賣出了不存在的票和重復(fù)的票;解決線程安全問題的一種方案:使用同步代碼塊格式:
synchronized(同步鎖){
需要同步操作的代碼
}
注意事項:
1.通過代碼塊中的鎖對象,可以使用任意的對象;
2.但是必須保證多個線程使用的鎖對象是同一個;
3.鎖對象作用:把同步代碼塊鎖住,只讓一個線程在同步代碼塊中執(zhí)行。
測試類:
二、同步技術(shù)的原理
使用了一個鎖對象,這個鎖對象叫同步鎖,也叫對象鎖,也叫對象監(jiān)視器3個線程一起搶奪cpu的執(zhí)行權(quán),誰搶到了誰執(zhí)行run方法進(jìn)行賣票。
t0搶到了cpu的執(zhí)行權(quán),執(zhí)行run方法,遇到synchronized代碼塊;
這時t0會檢查synchronized代碼塊是否有鎖對象發(fā)現(xiàn)有,就會獲取到鎖對象,進(jìn)入到同步中執(zhí)行t1搶到了cpu的執(zhí)行權(quán),執(zhí)行run方法,遇到synchronized代碼塊;
這時t1會檢查synchronized代碼塊是否有鎖對象發(fā)現(xiàn)沒有,t1就進(jìn)入到阻塞狀態(tài),會一直等待t0線程歸還鎖對象;
一直到t0線程執(zhí)行完同步中的代碼,會把鎖對象歸還給同步代碼塊,t1才能獲取到鎖對象進(jìn)入到同步中執(zhí)行出現(xiàn)線程安全問題,會出現(xiàn)不存在的數(shù)據(jù)以及重復(fù)的數(shù)據(jù),解決線程安全問題的其中一種方案使用同步代碼塊。
以上就是關(guān)于如何利用同步代碼塊解決數(shù)據(jù)安全問題的全部內(nèi)容介紹,想了解更多關(guān)于數(shù)據(jù)安全的問題,請繼續(xù)關(guān)注中培偉業(yè)。