ReentrantLock和Java中同步的区别

有两种方法可以通过多个线程锁定共享资源。一个是重入锁(Or ReadWriteLock),另一个是通过使用Synchronized方法。

Java 5的Java并发包中提供了ReentrantLock类。 

它是Lock接口的实现,根据java docs,Lock接口的实现提供了比使用同步方法可获得的操作更广泛的操作。

序号重入锁已同步
1
获取锁 
可重入锁类提供lock()了通过线程获取共享资源锁的方法 
您只需要编写synced关键字即可获取锁  
2
释放锁 
要释放锁,程序员必须调用unlock()方法
隐式完成 
3
 中断能力
lockInterruptible()方法可用于中断线程  
没有办法中断线程
4
公平 
此类的构造方法具有公平参数。如果将其设置为true,则锁定将授予对等待时间最长的 *线程的访问权限

锁不保证任何特定的访问权限
5
锁释放顺序 
锁可以以任何顺序释放 
锁应以获得锁的顺序释放 

ReentrantLock的示例

public class ReentrantLockExample implements Runnable{
   private Lock lock=new ReentrantLock();
   @Override
   public void run() {
      try {
         lock.lock()
         //锁定一些资源

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

SynchronizedLock的示例

public class SynchronizedLockExample implements Runnable{
   @Override
   public void run() {
      synchronized (resource) {
         //锁定一些资源
      }
   }
}