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