Java锁相关名词

  1. synchronized:可用于方法和代码块,实现对实例或类的同步访问,提供互斥访问。当一个线程进入被synchronized修饰的代码块时,自动获取对象锁(锁监视器),其他线程要等待锁的释放

  2. volatile:用于修饰变量,确保多个线程之间对被修饰变量的可见性,不可以保证原子性,所以在多线程操作volatile对象时,需要额外的同步手段

  3. Lock:<接口>定义了基本锁机制,有如下常见方法:

    • lock():获取锁,如果锁不可用则阻塞等待
    • unlock():释放锁,让其他线程获取锁
    • trylock():尝试获取锁,如果可用则获取锁,否则返回false
  4. ReentrantLock:<Lock接口的实现类>提供了可重入的互斥锁(可重入性:同一个线程可以多次获取同一个锁,不被自己持有的锁阻塞,即适应嵌套锁)

    ​ 具有公平性与非公平性:前者按线程申请顺序进行,后者可能存在线程插队

监视器锁: 用于实现同步机制,基于对象的内置锁(互斥锁)实现,

​ 每个Java对象都有一个内置锁,当synchronized修饰方法时,会隐式的获取对象的内置锁,从而形成一个监视器锁

​ 线程进入此代码时(被synchronized修饰)会自动获取对象的内置锁

​ 特点:1. 独占性:同一时间只能有一个线程持有对象的内置锁(监视器锁)

​ 2.互斥性:当一个线程持有锁时,其他线程必须等待

                3.释放锁:当线程执行完synchronized修饰的方法或抛出异常时,会释放锁