源码学习
1 | public ReentrantLock() { |
配合的Condition
在下篇手记-介绍Condition中有详细分析~
小总结:
- synchronized关键字:它是由JVM实现,并有很多内存监控工具提供帮助,并通过这些工具配合synchronized的内存标识,进行内存层面的“debug”或观察;当运行时出现异常,JVM会自动解锁并进行处理。
- ReentrantLock、ReentrantReadWriteLock、StampedLock是对象层面的锁,需要手动指定加锁与解锁操作(放在finally中)。
- StampedLock:因为加入乐观锁,故对吞吐量有较大的优化,尤其是读多写少时。但使用起来较复杂,API内容较多。
- 当线程较少推荐使用synchronized关键字,简单效率高;当线程较多,且线程并发的增长有一定趋势时(可预估),推荐使用ReentrantLock。