以上锁分类并不全指锁的状态,有些是锁的特性、设计。
公平锁:按线程申请锁的先后顺序获得锁 非公平锁:线程不是按先后顺序获得锁,效率比公平锁效率高
可重入锁:已获得的锁在内层可重复使用 不可重入锁:已获得的锁在内层不可重复使用
悲观锁:每次都假定访问时会有多个线程,执行代码前都要加锁,加锁成功后,其它线程处于阻塞状态 乐观锁:其实就是无锁,CAS就是无锁,每次都假定访问时只有自己一个线程
自旋锁:当一个线程在获得锁的时候,有其它线程获得锁,那么该线程就循环判断是否能获得锁,直至其它线程释放锁,然后获得锁。
分段锁:它是一种锁的设计,ConcurrentHashMap就是将hash数据分成多段,持有多把锁,其实就是分成多个hashmap,只有当线程访问同一把锁时才会阻塞,提高了效率。
互斥锁:加锁的代码块只能允许一个线程访问,其它线程则会阻塞 读写锁:它的read模式是共享锁、write模式是互斥锁。读锁和读锁能共存,读锁和写锁、写锁和写锁均不能共存
独享锁:就是互斥锁,该锁每次只能有一个线程访问 共享锁:该锁可以有多个线程访问
偏向锁:同一代码块一直被同一线程获得锁,那么下次将自动获得锁,降低获得锁的代价
轻量级锁:当锁是偏向锁时,被其它线程访问,偏向锁就会升级为轻量级锁,通过自旋转来获取锁,不会阻塞,提高性能
重量级锁:当轻量级锁时,线程一直自旋,当自旋次数达到一定次数时,将提升为重量级锁,让其它申请锁的线程进入阻塞状态,降低cpu的负载。synchronized是重量级锁。