ReentrantLock 可重入的互斥锁(独占锁)

Lock lock = new ReentrantLock();

独占锁意思是在同一时间点只能被一个线程持有;

可重入意思是ReentrantLock可以被单个线程多次获取;

ReentrantLock又可以分为公平锁和非公平锁,区别体现在获取锁的机制上,公平锁在获取锁的时候会先去等待队列里看有没有等待的线程,如果有就排在队列后面,如果没有再去获取锁;而非公平锁,就是不管队列里是否有等待的线程,直接去抢锁

内部方法:

lock() 加锁

unlock() 释放锁

tryLock(long time,TimeUnit unit) 尝试获取锁,不进等待队列,成功返回true,失败false

lockInterruptibly() 在等待时由其它线程调用等待线程的Thread.interrupt方法来中断等待线程的等待而直接返回,会抛出一个InterruptedException