Java中锁的分类
乐观锁、悲观锁
乐观锁:不加锁的并发操作是安全的
可重入锁
RerntrantLock
当一个线程进入到一个同步方法中,然后在此方法中要调用另一个同步方法,
而且两个方法公用同一把锁
此时线程是可以进入到另一个同步方法中的。
读写锁
ReentrantReadWriteLock
读读共享,读写互斥、写写互斥
分段锁
jdk8之后,去除了真正的分段锁,concurrentHashMap内有给方法加锁;
把锁进一步细粒度化提高并发效率。
自旋锁
获取锁的一种方式,例如原子类,当抢锁失败后,重试几次,抢到了就继续,抢不到线程阻塞。因
不断地进行尝试,会消耗cpu资源,因此适合时间短的线程,提高效率。
公平锁、非公平锁
公平锁:按照获取锁的顺序分配,ReentrankLock底层可以设置公平锁,默认是非公平锁
构造方法参数为true设置公平锁。
共享锁、独占锁
共享锁:多个线程共享同一把锁,读写锁中的读读操作
独占锁:synchronized ReentrankLock,读写锁中的写操作
锁的状态
1.无锁
2.偏向锁:一段同步代码被一个线程一直访问,该线程就会自动获取锁,降低获取锁的代价。
3.轻量级锁:在偏向锁的基础上,如果有其他线程访问,将会升级为轻量级锁,让线程以自旋的方式获取锁,线程不会阻塞。
4.重量级锁:当锁为轻量级锁时,自旋不会一直持续下去,达到一定次数后,还没有获取到锁,就会进入阻塞状态,该锁膨胀为重量级锁。当高并发时,获取不到锁的进入阻塞状态,等待操作系统调度。
原文地址:https://blog.csdn.net/weixin_63541561/article/details/135689971
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!