ReentrantLock
在了解ReentrantLock之前,我们首先回忆一下 synchronized ,synchronized是java内置的关键字,锁的获取和释放都是由jvm实现,因此用户就不需要显示的去释放锁,是一种独占的加锁方式,但是虽然方便,也有一定的弊端: 1.当线程尝试获取锁的时候,如果获取不到锁会一直阻塞,这个阻塞的过程,用户无法控制 2.如果获取锁的线程进入休眠或者阻塞,除非当前线程异常,否则其他线程尝试获取锁必须一直等待 接下来我们还需要了解几个相关的概念: 可重入锁 :可重入锁是指同一个线程可以多次获得同一把锁; ReentrantLock和关键字Synchronized都是可重入锁 。 可中断锁 :可中断锁时只线程在获取锁的过程中,是否可以相应线程中断操作。 synchronized是不可中断的 , ReentrantLock是可中断的 。 公平锁和非公平锁 :公平锁是指多个线程尝试获取同一把锁的时候,获取锁的顺序按照线程到达的先后顺序获取,而不是随机插队的方式获取。 synchronized是非公平锁 ,而 ReentrantLock是两种都可以实现,不过默认是非公平锁 1.ReentrantLock的使用方式 public class Demo { ReentrantLock lock = new ReentrantLock(); public static int num