synchronized的可重入性

今天,被一个阿里的冷面大佬无情的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值。

猜你喜欢

转载自blog.csdn.net/u010372981/article/details/81291080