概念
- synchronized,翻译同步,俗称内置锁
- ReentrantLock,Re-entrant-Lock,俗称重入锁,显示锁
synchronized的使用
- 当synchronized作用于普通方法是,锁对象是this;
- 当synchronized作用于静态方法是,锁对象是当前类的Class对象;
- 当synchronized作用于代码块时,锁对象是synchronized(obj)中的这个obj。
相同点
- 互斥性
- 内存可见性
- 可以重入(只是针对ReentrantLock)
不同点
- ReentrantLock实现Lock接口,需要显示的加锁和解锁
- ReentrantLock提供了非阻塞获取锁的方式,tryLock()
- ReentrantLock提供了超时获取锁的方式,tryLock(long timeout, TimeUnit unit)
- ReentrantLock能被中断的获取锁的方式,lockInterruptibly()
性能对比
- 在jdk5,并发量超过64,性能对比为4
- 在jdk5,并发量超过64,性能对比为1.x