synchronized与Lock、volatile的区别
synchronized与volatile的区别 volatile是线程同步的轻量级实现,因此volatile性能好于synchronized voaltile修饰变量,synchronized修饰方法和代码块 多线程访问volatile不会发生阻塞,但访问synchronized可能会阻塞 volatile可以保证数据的可见性,但不能保证原子性;而synchronized既可以保证原子性,也可以间接保证可见性。 volatile解决的是变量在多个线程之间的可见性,而Synchronized解决的是多个线程之间访问资源的同步性 synchronized与ReentrantLock的区别 都是可重入锁 synchronized是依赖于JVM实现的;而reentrantLock是依赖于JDK实现的,是API层面的,需要Lock()和unLock()方法配合try/finally语句块来完成。 reentrantLock比synchronized多了三项功能:等待可中断,可实现公平锁,可实现选择性通知(锁可绑定多个条件)。 等待可中断: 等待可中断是指线程可以选择放弃等待,改为处理其他事情,ReenTrantLock通过lock.lockInterruptibly()来实现的。 公平锁: 先等待的线程先获得锁。Synchronized只能是非公平锁