分布式实战-分布式锁mysql与redis实现(二)
使用锁的目的 多个外部线程同时来竞争使用同一资源时,会彼此影响,导致混乱 锁的目的,将资源的使用做排它性处理,使同一时间,仅一个线程能访问资源 并不是所有的资源,都无法同时服务多个线程 ------ 比如,无状态的资源 无成员变量/成员变量不存在变化的类---- 就是无状态类 ----- 这种类是线程安全的 有状态的对象,也不一定是不安全的 ---如果状态变化是原子的(即没有中间变迁过程,变化不需要时间,没有中间态) ---- 那么它一样是线程安全的 锁的本质 锁要解决的问题是 ------- 资源数据会不一致 锁要达成的目标是 ------- 让资源使用起来,像原子性一样 锁达成目标的手段 ------- 让使用者访问资源时,只能排队,一个一个地去访问资源 在单机应用里,JVM可以通过以下工具,可协调资源像原子性一样操作 1、sychronized ------ java语言天生支持 2、lock ---- jdk有接口标准 分布式环境下,如何协调资源达到原子性的操作? 1、sychronized / lock 这些java天然的实现,无法跨JVM发挥作用 2、只得去寻求分布式环境里,大家都公认的服务来做见证人,以协调资源 3、常见的公证人 ------》 mysql/zk/file/redis 4、目标 ----- 通过公证人发出信号,来协调分布式的访问者,排队访问资源 5