TIP

方法A、方法B都是锁定同一对象的话

方法A调用方法B时,不需要重新申请

这里不详细介绍,后续章节介绍

package com.mrzhang.javalearn.bingfa.demo_02;

import java.util.concurrent.TimeUnit;

/**
 * Synchronized基本使用(六)
 * <p>
 * Synchronized可重入锁
 *
 * @author 91MrZhang on 2020/7/31
 */
public class SynchronizedDemo06 {

    private final Object lock = new Object();

    public synchronized void m1() {
        System.out.println("m1准备工作3秒");
        m2();
        try {
            TimeUnit.SECONDS.sleep(3);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("m1已经工作完3秒");
    }

    public synchronized void m2() {
        String tname = Thread.currentThread().getName();
        System.out.println(tname + "->m2准备工作5秒");
        try {
            TimeUnit.SECONDS.sleep(5);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println(tname + "->m2已经工作完5秒");
    }


    public static void main(String[] args) {
        SynchronizedDemo06 sd05 = new SynchronizedDemo06();
        new Thread(sd05::m1, "线程1号").start();
        try {
            TimeUnit.SECONDS.sleep(2);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        new Thread(sd05::m2, "线程2号").start();
    }
}