解決線程安全問題方法

解決多線程導致的線程安全問題:

1:同步代碼塊

    格式:
        synchronized(鎖對象){
        可以會出現線程安全問題的代碼(訪問了共享數據的代碼)
}
注意:
  • 1:通過代碼塊中的鎖對象,可以使用任意對象(一般直接object)

  • 2: 但是必須保證多個線程使用的鎖對象是同一個

  • 3:鎖對象作用:把同步代碼塊鎖住,只讓一個線程在同步代碼塊中執行


2:定義同步方法

    格式:
        權限修飾符 synchronized 返回值類型 方法名(參數){
         可以會出現線程安全問題的代碼(訪問了共享數據的代碼)
}

使用步驟:
將訪問了共享數據的代碼寫成一個方法,方法添加synchronized修飾符

定義一個同步方法,方法也會將內部代碼鎖住,只讓一個線程執行,
同步方法的鎖對象就是實現類 new RunnableImpl,也就是this

靜態同步方法的鎖對象是本類的class屬性—>class文件對象(反射)
不能是this了,this是創建對象後產生的,靜態方法優先於對象


3:Lock鎖

java.util.concurrent.locks.lock接口
Lock實現 提供了比使用synchronized方法和語句可獲得的更廣泛的鎖定操作

Lock接口的方法:
void lock() 獲取鎖
void unlock() 釋放鎖

使用步驟:

  • 1:在成員位置創建一個ReentrantLock對象(接口的實現類對象)

  • 2:在可能出現安全問題的代碼前調用lock鎖方法開啓鎖

  • 3:在可以出現安全問題的代碼後調用unlock鎖方法關閉鎖


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章