Lock分析

 
  Lock接口是锁的实现,用来控制多个线程访问共享资源的方式,是在java 1.5的时候引入的,在此之前,只能通过synchronized的方式来取得对象的锁。
  synchronized中的锁是隐式获取释放的,而Lock中的锁需要显示的获取和释放,同时提供了可中断,超时获取等Synchronized不具备的特性。
  
  由于Synchronized中的是隐式的获取和释放锁,所以只能是先获取一个锁,然后释放该锁,但是在Lock的时候,却可以先获取一个锁,再获取另外一个锁,
  然后在释放掉前一个锁。
  
  同时,在Lock中还提供了一种条件锁的方式,通过newCondition()来获取一个条件锁。
 
  提供的主要方法:
  void lock():获取锁,调用该方法当前线程将会获取锁, 当锁获得后,从该方法返回
 
  void lockInterruptibly() throws InterruptedException:可中断地获取锁,和lock()方法的不同之处在于该方法会响应中断,即在锁的获取中可以中断当前线程
 
  boolean tryLock() :尝试非阻塞的获取锁,调用该方法后立刻返回,如果能够获取则返回true,否则返回false
 
  boolean tryLock(Long time,TimeUnit unit) throws InterruptedException:超时的获取锁,只有在当前线程获得了锁、被中断、超时才会返回
 
  void unlock():释放锁。
 
  Condition newCondition():获取条件锁(等待通知组件),该组件和当前的锁绑定,当前线程只有获得了锁,才能调用该组件的wait()方法,而调用后,当前线程将释放锁。
 
 
   使用方式:
 Lock l = ...;
 l.lock();
 try {
   // access the resource protected by this lock
 } finally {
   l.unlock();
 }
 
 
 
 
 
 
 

猜你喜欢

转载自www.cnblogs.com/zerotomax/p/8966904.html