面试官:
    Lock锁知道吗?说一说吧。
    我:
    嗯~知道!
    Lock锁和synchronized不一样。Lock是一个接口,它可以通过tryLock方法的返回值来获取是否获得锁的状态。synchronized在遇到异常的时候或者执行结束会自动释放锁,而lock不会,可能就会形成死锁,所以我们一般和try catch finally 一起使用。Lock锁也可重入,但可判断公平或不公平。
    我们使用的ReentrantLock就实现了该接口。它的底层是使用 【CAS+State原子变量+队列】 来实现的。公平锁就是:不管你是什么线程,只要是来抢锁,就直接进到队列排队,获得锁的机会是公平的,先到先得。非公平锁就是:先来的线程已经在队列里面排队了,后来的线程可以先去抢一次锁,再进队列。相当于插队嘛!所以不公平。