redis 实现分布式锁

参考文档: Redis实现分布式锁 在单体应用中,如果我们对共享数据不进行加锁操作,会出现数据一致性问题,我们的解决办法通常是加锁。 在分布式架构中,我们同样会遇到数据共享操作问题,本文章使用 Redis 来解决分布式架构中的数据一致性问题。 1. 单机数据一致性 单机数据一致性架构如下图所示:多个

AQS 框架

参考文档:深入理解Java并发框架AQS系列(二):AQS框架简介及锁概念 1. AQS 框架和概念 1.1 思考 我们去学习一个知识点或开启一个新课题时,最好是带着问题去学习,这样针对性比较强,且印象比较深刻,主动思考带给我们带来了无穷的好处 抛开AQS,设想以下问题: Q:如果我们遇到 thre

 

java 锁

1. 乐观锁 乐观锁是一种乐观思想,即认为读多写少,遇到并发写的可能性低,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,采取在写时先读出当前版本号,然后加锁操作(比较跟上一次的版本号,如果一样则更新),如果失败则要重复读-比较-写的操

 

ReentrantReadWriteLock

参考文档:ReadWriteLock场景应用解析 1. 介绍 为了提高性能,Java 提供了读写锁,在读的地方使用读锁,在写的地方使用写锁,灵活控制,如果没有写锁的情况下,读是无阻塞的,在一定程度上提高了程序的执行效率。 读写锁分为读锁和写锁,多个读锁不互斥,读锁与写锁互斥,这是由 jvm 自己控制

 

CAS

1. 概念及特性 CAS(Compare And Swap/Set)比较并交换,CAS 算法的过程是这样:它包含 3 个参数 CAS(V,E,N)。 V 表示要更新的变量(内存值),E 表示预期值(旧的),N 表示新值。 当且仅当 V 值等于 E 值时,才会将 V 的值设为 N,如果 V 值和 E

 

类锁和对象锁

1. 对象锁 修饰在非静态方法或者锁对象为普通对象。 多个线程调用同一个对象的同步方法会阻塞,调用不同对象的同步方法不会阻塞。(java 对象的内存地址是否相同) // 非静态方法 public synchronized void obj3() { } // 普通对象 synchroni