• synchronized是java关键字,Lock不是(是java.util.concurrent.locks包下的接口)
  • synchronized无法设置等待时间,Lock可以
  • synchronized无法响应中断,Lock可以
  • synchronized无法区分读写,Lock可以(多个读线程可同时获取读锁)
  • synchronized无法知道是否成功获取锁,Lock可以
  • synchronized是非公平锁,Lock可以设置为公平锁
  • 当竞争资源非常激烈时(即有大量线程同时竞争),Lock的性能要远远优于synchronized

  • synchronized会自动释放锁,Lock不会(需在finally中释放)