紧接着上一篇你好,谈谈对Synchronized的理解?(五),这一篇文章来总结对比volatile和synchronized。

五、对比volatile

前面文章面时莫慌 | 你好,请谈谈volatile关键字?(全篇)详细介绍了volatile关键字的用法,原理。这篇文章我们来总结一下这synchronized和volatile的主要区别。synchronized用于实现一个基于锁的线程模型;而volatile包括Atomic是非锁定的,这意味着线程不需要锁来访问共享变量。


image.png

总的来说,volatile 不能控制线程对其对象的访问,这允许多个线程对其操作,而不需要等待对象的锁定,所以它性能相当的快,它将确保对变量的任何更改都将被刷新到主内存,然而,访问主存被认为是非常昂贵的,因此直接对主存进行读写的开销是非常大的。

synchronized 它保证一段代码一次不会被多个线程访问,消除了所有可能的竞争条件,因为是基于锁,使用它是非常昂贵的,它在一定程度上牺牲了多线程并发的优势--速度。

那么怎么使用这两个关键字呢?除了被使用的不同代码地方,还有下面两个原则。

当变量将被多个线程读取,单只是被一个线程写入时,使用volatile。

当多个线程读取和写入变量时使用synchronized。