锁类型
-
可重入锁:在执行对象中所有同步方法不用再次获得锁
-
可中断锁:在等待获取锁过程中可中断
-
公平锁: 按等待获取锁的线程的等待时间进行获取,等待时间长的具有优先获取锁权利
-
读写锁:对资源读取和写入的时候拆分为2部分处理,读的时候可以多线程一起读,写的时候必须同步地写
synchronized
JVM内置支持。
仅支持可重入锁类型。
异常时,锁自动释放。
lock
支持四种锁类型。
需要手动释放锁。
原理:
锁优化:
1、自旋锁:CAS
2、偏向锁:消除数据在无竞争情况下的同步原语。如果确定没有别的线程来争抢,那么就去掉同步语句。