多线程学习--synchronized关键字

“锁”本身是个对象,synchronized这个关键字不是锁,是一种加锁的工具
多线程学习--synchronized关键字多线程学习--synchronized关键字
所以,所谓的加锁,严格意义上不是锁住代码块

  • 互斥的最基本条件是共用同一把锁

  • 静态方法的锁是所在类的Class对象,普通方法锁的是this对象

  • 针对同一个线程,synchronized锁可支持重入

下面给出几个案例,加深上述3句话的理解

  • 同一个类中的synchronized method 1和method 2互斥吗?
    多线程学习--synchronized关键字
    t1线程执行m1方法需要去读取this对象锁,但是t2线程不用,两者没有交集

  • 同一个类中的synchronized method 1可以调用synchronized method 2吗?
    多线程学习--synchronized关键字
    synchronized是可重入锁,可以理解为同一个线程在已经持有该锁的情况下,可以再次获取该锁,并在某个状态值加一

  • 子类同步方法synchronized method m可以调用父类同步方法synchronized method m(super.m())吗?
    多线程学习--synchronized关键字
    子类对象初始化前,会调用父类构造方法,在结构上相当于包裹了一个父类对象,用的都是this锁对象

  • 静态同步方法与非静态同步方法互斥吗?

多线程学习--synchronized关键字
各玩各的,不是同一把锁,谈不上互斥