今天,被一个阿里的冷面大佬无情的diss了。
不过,话说回来,跟冷面的大佬聊天也是比较爽快的一件事,总比有的大佬扯了半天,也扯不到关键。。。
线程请求一个由其它线程持有的对象锁时,该线程会阻塞,而线程请求由自己持有的对象锁,如果可以获取,就说明这个锁支持可重入。
/**
* @author by bixi.lx
* @created on 2018 07 30 20:01
*/
public class Student {
public static void main(String[] args) {
Student student = new Student();
student.doA();
}
public synchronized void doA() {
System.out.println("do a");
doB();
}
public synchronized void doB() {
System.out.println("do b");
}
}
当然,可重入锁,也是针对同一个线程而言的。同一线程在调用自己类中其他synchronized方法/块或调用父类的synchronized方法/块都不会阻碍该线程的执行。而java是多线程的,在多线程就不可以了。
以上,也就解释了ReentrantLock的可重入,也是基于同一个线程的,获取锁的时候,首先记录下当前获取锁的线程,并记录count值。