作者简介: zoro-1,目前大二,正在学习Java,数据结构,javaee等
作者主页: zoro-1的主页
欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖💖
锁策略定义
锁策略是指在多线程或多进程环境中,用于控制共享资源并发访问的一种机制。它可以确保在同一时间只有一个线程或进程可以访问共享资源,从而避免竞争条件和数据不一致的问题。(锁内部处理加锁冲突涉及的一些不同解决方法)
锁策略
1.乐观锁与悲观锁
乐观锁:假设加锁冲突的概率是很小的,加锁前准备工作很少,所以加锁速度很快,容易出现一些不必要的问题,容易造成cpu的损耗。
悲观锁:假设加锁冲突的概率是很小的,加锁前准备工作很多,所以加锁速度很慢,不容易出现问题。
2.轻量级锁和重量级锁
轻量级锁:加锁开销小,加锁速度快
重量级锁:加锁开销大,加锁速度慢
3.自旋锁和挂起等待锁
自旋锁:相当于一个while循环内不断获取锁,当一个线程释放锁立即获取到锁,但当当前线程数多时,自旋意义不大,反而消耗cpu
挂起等待锁:当一个线程获取到锁时,就挂起等待,不参与竞争,直到所有的西线程都释放锁再去获取到锁
4.普通互斥锁和读写锁
普通互斥锁:加锁和解锁操作
读写锁:
当两个线程都涉及的是读操作时:加读锁
当两个线程涉及的是读操作和写操作时:加读锁和写锁
当两个线程都涉及的是写操作时:加写锁
在读读操作时不冲突;读写操作冲突;写写操作冲突;
为什么引入读写锁?
引入读写锁的目的是通过允许多个线程同时进行读操作,提高并发性和性能。同时,读写锁也会保证在写操作执行时,其他的读线程会被阻塞,保证写操作的数据一致性。
5.公平锁和非公平锁
这里的公平的意思是先来后到的规则,先来的加锁,后来的后加锁
6.可重入锁和非可重入锁
这里的重入意思就是连续加锁
今天的分享到这里就结束了,感谢大家支持