synchronized 关键字可以将对象和方法标记为同步,达到互斥访问的目的
对象锁
锁代码块
        Test test = new Test();
        synchronized (test) {
            //TODO
            System.out.println();
        }
锁this
       synchronized (this) {
            //TODO
            System.out.println();
        }
锁非静态方法
    public synchronized void t1() {
        //TODO
        System.out.println();
    }
类锁
类信息存储在方法区中,所有线程共享方法区,所以所有线程共享类锁
锁 Xxx.class
        
        synchronized (Test.class) {
            //TODO
            System.out.println();
        }
锁静态对象
    public static Object lock = new Object();
    
    public void t1() {
        synchronized (lock) {
            //TODO
            System.out.println();
        }
    }
锁静态方法
    public static synchronized void t1() {
        //TODO
        System.out.println();
    }