- 1、synchronized是java 内置关键字,Lock为一个 类。
- 2、synchronized 隐式得到锁,隐式释放锁,故而,运用起来更加方便,快捷。
- 3、Lock类如下:
public interface Lock {
/**
* 获取锁
*/
void lock();
/**
* 获取可中断锁
*/
void lockInterruptibly() throws InterruptedException;
/**
* 尝试获取锁
*/
boolean tryLock();
/**
* 尝试获取锁,含超时时间
*/
boolean tryLock(long time, TimeUnit unit) throws InterruptedException;
/**
* 释放锁
*/
void unlock();
}
- 4、显式获取和释放锁,并提供额外的锁类型,故而相对于synchronized 关键字有更大的 灵活性。
- 5、
概念:
- 1、均为可重入锁
- 可重入锁:一个线程再次进入同步代码的时候.可以使用自己已经获取到的锁。
- 2、synchronized为 悲观锁。
- 3、Lock 只是一个顶层抽象接口,并没有实现,也没有规定是乐观锁 还是悲观锁实现规则。
- 4、ReentrantLock 作为 Lock 的一种实现,是悲观锁。