線程同步和通信synchronized和lock

1. synchronized
     被synchronized修飾的對象叫做同步監視器,多個線程進入被synchronized修飾的方法或代碼塊時,需要獲得對同步監視器的鎖定,同一時刻只有一個線程能夠獲得對同步監視器的鎖定,據此實現線程同步機制。對於synchronized同步監視器的解鎖下面有單獨說明。
     1. synchronized 用法
          1. 修飾方法
              public synchronized void test(){
                   .... 
               }
               此時默認this作爲同步監視器
          2. 修飾同步代碼塊
               synchronized(lock){
               }
      此時顯示指定lock對象作爲同步監視器
     2. 釋放同步監視器的幾種情況
          1. 同步方法或同步代碼塊執行完畢
          2. 同步方法或同步代碼塊return或break
          3. 異常退出
          4. wait
     3. 線程同步
          調用同步監視器的wait,notify和notifyAll方法
2. lock
     1. 使用ReentrantLock
     ReentrantLock lock  = new ReentrantLock();
     lock.lock();
     try{
          ...
     }finally{
          lock.unlock();
     }
     2. 線程通信,使用lock加鎖解鎖需要使用condition進行控制
          ReentrantLock lock  = new ReentrantLock();
          Condition cond = lock.newCondition();
          cond.await()
          cond.signal()
          cond.signalAll()
          以上三個方法與wait、notify和notifyAll比較類似
3. 阻塞隊列BlockingQueue
     利用BlockingQueue阻塞隊列的put和take方法的線程阻塞實現線程控制
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章