可重入锁
广义上的可重入锁指的是可重复可递归调用的锁,在外层使用锁之后,在内层仍然可以使用,并且不发生死锁(前提得是同一个对象或者class),这样的锁就叫做可重入锁。ReentrantLock和synchronized都是可重入锁,下面是一个用synchronized实现的例子:
synchronized的可重入性
synchronized是JVM内置锁。
可重入性的实现方式是,synchronized会为每一个锁关联一个获取计数器和所有者线程,其他线程调用会阻塞;如果相同的线程再次调用这个锁,计数值递增;退出时,递减,当计数为0时,锁会被释放,
public class ReentrantTest implements Runnable {
public synchronized void get() {
System.out.println(Thread.currentThread().getName());
set();
}
public synchronized void set() {
System.out.println(Thread.currentThread().getName());
}
public void run() {
get();
}
public static void main(String[] args) {
ReentrantTest rt = new ReentrantTest();
for(;;){
new Thread(rt).start();
}
}
}
复制代码