線程安全問題
什麼是線程安全問題?
多個線程操作同一個共享資源的時候可能會出現線程安全問題。
如何解決線程安全問題?
使用線程同步
線程同步
什麼是線程同步?
線程同步是多個線程同時通路同一個資源。
線程同步的作用:
就是為了解決線程安全問題的方案
如何實作線程同步?
把共享資源進行上鎖,每次隻能一個線程進入通路完畢後,其他線程才能繼續通路。
線程同步的方式有三種:
--1.同步代碼塊
--2.同步方法
--3.lock顯示鎖 同步代碼塊
同步代碼塊
作用:把出現線程安全問題的核心代碼給上鎖,每次隻能一個線程進入,執行完畢以後自動上鎖,其他線程才可以進來執行。
格式:
鎖對象建議使用共享資源
--在執行個體方法中建議使用this作為鎖對象。此時this正好是共享資源!
--在靜态方法中建議使用類名.class位元組碼作為鎖對象。
同步方法
作用:
把出現線程安全問題的核心方法給鎖起來
每次隻能使一個線程進入通路,其他線程必須在方法外面等待。
用法:
直接給方法加上一個修飾符 synchronized
lock顯示鎖
java.util.concurrent.locks.Lock機制提供了比synchronized代碼塊和synchronized方法更廣泛的鎖操作,同步代碼塊/同步方法具有的功能Lock鎖都有,除此之外更強大更友善
Lcok鎖也稱同步鎖,加鎖與釋放鎖方法化了,如下:
執行個體: