Java高并发编程笔记(4)-重入锁

读书笔记

2019-09-03

274

0

 

重入锁(ReentrantLock)

Java并发包中的重入锁java.util.concurrent.locks.ReentrantLock,可以完全代替synchronized关键字。

自从java1.6后,synchronized关键字的性能与重入锁的性能相差无几。

 重入锁的优点

逻辑控制的灵活性,并且可以重复获取锁

lock.lock();
lock.lock();
try{
   i++;
}finally{
  // 释放锁的次数一定要与获得锁的次数相同,否则会抛出 
  // IllegalMonitorStateException异常
  lock.unLock();
  lock.unLock();
}

 

提供中断响应

public void run(){
   try{
      //业务逻辑
      lock.lockInterruptibly();
      //业务逻辑

    }catch(InterruptedException e){
       e.printStackTrace();
    }finally{
       if(lock.isHeldByCurrentThread())
          lock.unlock();
    }
}

锁申请限时等待

public void run(){
   try{
       if(lock.tryLock(5,TimeUnit.SECONDS)){
           Thread.sleep(6000);
       }else{
           System.out.println("Get lock failed!");

       }
   }catch(InterruptedException e){
        e.printStackTrace();
   }finally{
        if(lock.isHeldByCurrentThread()){
            lock.unLock();
         }
   }
}

公平锁

public static ReentrantLock fairLock = new ReentrantLock(true);
public void run(){
    while(true){
      try{
         fairLock.lock();
         //业务逻辑
      }finally{
         fairLock.unLock();
      }
    }
}

 

发表评论

全部评论:0条

Eric

莫等青春散场,才后悔来不及、回不去、得不到

热评文章

推荐文章