一、公平锁和非公平锁
公平锁:就是很公平,在并发情况下,每个线程在获取锁时会查看此锁维护的等待队列,如果为空,或者当前线程是等待队列的第一个,就占有锁,否则就会加入到等待队列中,以后会按照FIFO的规则从队列中取到自己。(按先后顺序执行)
非公平锁:非公平锁比较粗鲁,上来就直接尝试占有锁,如果尝试失败,就再采取类似公平锁那种方式。
ReentrantLock 支持公平锁和非公平锁
二、可重入锁
可重入锁:指的是同一个线程外层函数获得锁之后,内层递归函数仍然能获取该锁的代码,同一线程在外层方法获取锁的时候,在进入内层方法会自动获取锁。
必须调用unlock解锁。