synchronized和lock鎖的總結

線程不安全的問題怎麼解決?

synchronized和lock都能解決線程不安全的問題

一、synchronized

三種同步方式:同步代碼塊(使用自定義明鎖)、同步函數(使用this鎖)、同步靜態函數(使用字節碼文件,即類.class)

  • synchronized使用的有哪些關鍵字呢?

wait()notify()notifyAll()是三個定義在Object類裏的方法,可以用來控制線程的狀態。

  •      sleep() 和 wait()區別?

sleep()在Thread類中,wait()在Object類中;

sleep不會釋放鎖,而wait()則會釋放鎖,調用notify()後纔會進入運行狀態;

二、lock

爲什麼會有lock鎖?

解決了synchronized不能手動上鎖開鎖的問題

jdk1.5以上併發包 有:lock、線程池Executors、Condition

寫法爲:

Lock lock  = new ReentrantLock();
lock.lock();
try{
//可能會出現線程安全的操作
}finally{
//一定在finally中釋放鎖
//也不能把獲取鎖在try中進行,因爲有可能在獲取鎖的時候拋出異常
  lock.ublock();
}

Condition類的使用似於synchronized中的 wait()和notify(),用法如下:

Condition condition = lock.newCondition();
res. condition.await();  類似wait
res. Condition. Signal() 類似notify
Signalall notifyALL

三、synchronized和lock區別

synchronized不需要釋放鎖,lock需要開鎖釋放鎖

 

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