使用 synchronized 关键字将会隐式的获取锁,但是它将锁的获取和释放固化了,这种方式简化了同步的管理,但是可扩展性和灵活性较差。通过使用 Java 提供的显式锁,我们可以更加灵活地使用锁处理同步,并且可以方便地自定义锁。下面是与 synchronized 相比,显式锁特有的功能:
-
可以尝试非阻塞的获取锁
-
在获取锁时可以响应中断
-
在获取锁时可以响应超时
-
公平锁
-
非公平锁
-
自旋锁
-
可重入锁
-
偏向锁
-
轻量级锁
-
重量级锁
-
读写锁
-
互斥锁
-
锁消除
-
锁粗化
-
悲观锁
-
乐观锁
-
共享锁
-
排他锁