引入

在Java高并发场景下,主要使用是三种锁synchronizedStampedLockLock

比较

synchronized StampedLock Lock
是JVM的的内置锁,每个JDK版本都会优化 是一个Java类,可以更好的扩展 是一个Java类,可以更好的扩展
都是悲观锁 提供了写的乐观锁 都是悲观锁,但是提供了自旋锁,或者不阻塞的获取锁
性能一般,因为有一个从用户态到内核态的过程 性能最好,可以代替读写锁 性能十分不稳定,在复杂的读写环境下,性能十分差
不具有公平锁 不具有公平锁 具有公平锁
锁会自动释放 锁需要手动释放 锁需要手动释放

总结

  • StampedLock是性能最好的,可以胜任复杂的读写多线程环境
  • 令人惊奇的是synchronized由于是内置锁,每个JDK版本都会优化,尤其在复杂的读写多线程情况下,表现依然很优秀。
  • Lock虽然提供了读写锁,但是性能特别差;而ReentrantLock性能十分好,同时功能丰富

个人推荐:<mark>如果时读写环境,推荐使用StampedLock;如果是正常的加锁,推荐使用synchronized;如果需要对锁有更多的控制,推荐使用ReentrantLock</mark>