《java多線程編程核心技術》讀書筆記4:Lock的使用

第四章:Lock的使用


在Java中,除了通過synchronized關鍵字進行同步處理意外,Java還提供了另外的方法進行同步,這就是Lock這個類;


      Lock lock = new ReentrantLock();

      lock.lock()方法獲得對象鎖,lock.unlock()方法釋放對象鎖。相對於synchronized關鍵字這個lockz比較直接,易於理解。

      lock.lock()方法所取得的鎖是對象鎖,當一個線程取得鎖以後,其餘線程則無法訪問同樣的鎖所標記的代碼。


       synchronized關鍵字和wait()和notify(),notifyAll()方法的結合可以實現等待/通知模式,ReentrantLock也可以實現同樣的功能,但需要藉助Condition對象。

       notify()/notifyAll()方法進行通知時被通知的線程是由JVM隨機選擇的。但是使用ReentrantLock結合Condition類是可以實現選擇性通知的。

       synchronized就相當於整個Lock對象中只有一個單一的Condition對象,所有的線程都註冊在它一個對象的身上。


       如果想要實現選擇性喚起某些線程,就需要生多個Condition對象,當在多個線程的調用的時候,調用那個Condition的signal()方法,於此Condition相關的線程就會被喚醒。


   公平鎖,非公平鎖:在生成lock= new ReentrantLock(isFair)的時候,isFair是true就是公平鎖,是false就是非公平鎖,公平的意思是先到先服務這就是所謂的公平,但這也是相對的程序運行時,不一定非是先來先服務,總體上是先來先服務。


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