锁的分类

锁的分类:

悲观锁和乐观锁:乐观锁和悲观锁是并发控制的一种机制,用于多线程或多进程环境下对共享资源的访问管理,以防止数据不一致或竞态条件。它们的主要区别在于对待冲突的策略。

悲观锁是一种对资源持有较悲观态度的锁定方式。它假设数据在并发访问时极有可能发生冲突,因此每次访问数据时都会先加锁,以确保其他线程不能访问此数据直到锁被释放。

乐观锁则持相对乐观的态度,假设并发操作冲突的可能性较小,因此不会主动加锁,而是进行数据版本检查来决定是否提交操作。适用于读多写少的场景。

⾮⾃旋锁和自旋锁:主要是从未获取到锁是否要阻塞。

⾮⾃旋锁:未获取到锁不需要阻塞。比方说使用redis上锁的时候,可以加个超时时间。

自旋锁:未获取到锁需要阻塞,一直等到获取到锁。比方说CAS.

公平锁 和⾮公平锁:竞争锁的时候是否需要排队。

公平锁:竞争锁的时候是需要排队。

非公平锁:竞争锁的时候不需要排队。

比方说我们的ReentrantLock,默认是非公平锁,可以在构造方法中传入true,变成公平锁。

可重⼊锁 和不可重⼊锁:一个线程多个阶段是否能获取同一把锁。

可重入锁:一个线程多个阶段能够获取同一把锁。

不可重入锁:一个线程多个阶段不能够获取同一把锁。

比方说:ReentrantLock,ReentrantReadWriteLock底层的重入机制,每次重入都会给aqs的state变量加1记录重入次数。

共享锁和排他锁:多个线程是否共用一把锁。

共享锁:多个线程可以共用一把锁。

排他锁:多个线程不可以共用一把锁。

比方说读锁就是一种共享锁,写锁就是一种排他锁。

posted on 2024-09-07 17:15  ~码铃薯~  阅读(18)  评论(0编辑  收藏  举报

导航