Synchronized 與 ReentrantLock 的區別與聯繫

       作爲Java中舉足輕重的併發編程,同步是非常重要的機制;在Java中提供了JVM層面的 synchronized來保持同步;同時也提供了與synchronized非常相似的代碼層面上的ReentrantLock 的同步機制。

       那麼synchronized 和 ReentrantLock有區別和聯繫呢:

       1、RentrantLock提供了synchronized的所有功能,而且比synchronized更加地靈活;

       2、線程A和B都要獲取對象O的鎖定,假設A獲取了對象O鎖,B將等待A釋放對O的鎖定

             synchronized :其中一個線程A獲取鎖,則B線程只能等待A釋放鎖;

             ReentrantLock :提供了中斷功能,在等待一定時長之後可以中斷然後做其他的事情;

       3、synchronized 在線程執行完畢之後會自動釋放鎖,而ReentrantLock需要手動釋放鎖 並且必須在finally塊裏釋放(原因是不在finally塊中釋放,如果發生異常則無法正常釋放鎖);

       4、ReentrantLock 提供了很多方法 包括 lock()   tryLock()  unlock()  具體方法使用就不一一介紹,編程的學習已實踐爲主,多寫寫代碼多思考,自然而然就掌握了。

      使用上講 ReentrantLock 提供了更大的靈活性,而且在併發量非常大的情況下性能會比synchronized 要好,而synchronized 使用比較方便簡潔。spring中很多地方都是用synchronized保持同步的。一般情況下用synchronized 足夠了,當然這只是個人見解。

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