Synchronized和Volatile的区别
其实二者是互补的,不是对立的存在!
1.volatile关键字是线程同步到轻量级实现,所以volatile性能比synchronized要好,但是volatile只能修饰变量,synchronized可以修饰方法以及代码块
2.volatile可以保证数据的可见性,不能保证原子性,但是synchronized都可以。
3.Volatile主要是解决变量在多个线程之间的可见性,而synchronized是解决多个线程之间的同步性。
Synchronized和Lock的区别
第一语法层面:synchronized是c++语言实现,退出同步代码块会自动释放锁,Lock是接口,需要手动unlock来释放锁。
第二功能层面:都是悲观锁,但是Lock提供了许多synchronized不具备的功能,中断,超时,公平锁。
第三性能层面:没有竞争时,synchronized做了很多优化,偏向锁、轻量锁性能不赖,竞争激烈时,Lock会有更好的性能。