Java锁相关的名词
Java锁相关名词
synchronized:可用于方法和代码块,实现对实例或类的同步访问,提供互斥访问。当一个线程进入被synchronized修饰的代码块时,自动获取对象锁(锁监视器),其他线程要等待锁的释放
volatile:用于修饰变量,确保多个线程之间对被修饰变量的可见性,不可以保证原子性,所以在多线程操作volatile对象时,需要额外的同步手段
Lock:<接口>定义了基本锁机制,有如下常见方法:
- lock():获取锁,如果锁不可用则阻塞等待
- unlock():释放锁,让其他线程获取锁
- trylock():尝试获取锁,如果可用则获取锁,否则返回false
ReentrantLock:<Lock接口的实现类>提供了可重入的互斥锁(可重入性:同一个线程可以多次获取同一个锁,不被自己持有的锁阻塞,即适应嵌套锁)
具有公平性与非公平性:前者按线程申请顺序进行,后者可能存在线程插队
监视器锁: 用于实现同步机制,基于对象的内置锁(互斥锁)实现,
每个Java对象都有一个内置锁,当synchronized修饰方法时,会隐式的获取对象的内置锁,从而形成一个监视器锁
线程进入此代码时(被synchronized修饰)会自动获取对象的内置锁
特点:1. 独占性:同一时间只能有一个线程持有对象的内置锁(监视器锁)
2.互斥性:当一个线程持有锁时,其他线程必须等待
3.释放锁:当线程执行完synchronized修饰的方法或抛出异常时,会释放锁
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 IT蛋的个人博客!