volatile 关键字:一个轻量的线程关键字,用于修
饰变量,使得线程在每次使用变量的时候,都会读
取变量修改后的值。
其实说白了 volatile 就是一个轻量级的
synchronized
volatile 和 synchronized 的比较:
• volatile 是 synchronized 的轻量级实现;
• volatile 只能修饰变量,synchronized 只能修饰方法和代码块;
• volatile 不会造成阻塞,synchronized 会。
接下来我讲解一下 Java 中的 Lock 与 synchronized
首先,我们要先认识到一个概念就是:可重入锁,
Lock 是在 Java 中是一个接口,我们这里在讲解
Lock 与 synchronized 的区别的时候,我们先提前讲
解一下 ReentrantLock 与 synchronized 的区别,那
么什么是 ReentrantLock 呢?其实就是 Lock 的一个
实现类,字面意思的话就是可重入锁,那么什么是
可重入锁呢?
一:可重入锁:
可重入锁是锁的一个相关概念,并不是特指我们的 ReentrantLock,而是如果
一个锁具备可重入性,那我们就说这是一个可重入锁。ReentrantLock 和
synchronized 都是可重入锁。至于什么是可重入性,这里举个简单的例子,现
在在一个类里我们有两个方法(代码如下)
一个叫做去北京,一个叫做买票,那我们在去北京的方法里可以直接调用买票
方法,假如两个方法全都用 synchronized 修饰的话,在执行去北京的方法,
线程获取了对象的锁,接着执行买票方法,如果 synchronized 不具备可重入
性,那么线程已经有这个对象的锁了,现在又来申请,就会导致线程永远等待
无法获取到锁。而 synchronized 和 ReentrantLock 都是可重入锁,就不会出
现上述的问题。
class Trip {
public synchronized void goToBeiJing() {
评论0