基本锁到分布式锁

ε祈祈猫儿з 提交于 2021-02-17 02:12:49

锁的机制一般都是用于多线程安全中,多线程竞争统一资源

一、 java的

synchronized:

lock:java.util.concurrent.locks

lock.lock();
try{
    // 处理
}catch(Exception ex){
    // 捕获异常
}finally{
    // 释放锁
    lock.unlock();   
}

二、JMM的volatile锁关键字。

保证可见性,保证线程不从自己的副本中读值,都强制从主工作区读取值!

三、数据库的锁

select * from table where ? lock in share mode;//共享锁
select * from table where ? for update;//排他锁

悲观锁:觉得我在操作的时候一定有人试图来篡改干扰我,很悲观,所以会给加上一个排他锁。

乐观锁:觉得别人对我当前操作的影响无所谓,非常乐观,即便出现了冲突,让用户决定和承担,所以只会加共享锁!

四、分布式锁

本地锁在分布式架构中就实效了,所以分布式需要自己特定的分布式锁的概念:

  1. 基于数据库实现分布式锁:当我们要锁住某个方法或资源的时候,我们就在该表中增加一条记录,想要释放锁的时候就删除这条记录。(同Redis一样,不过数据库的操作会比Redis慢,因为Redis是基于内存缓存数据库)
  2. 基于缓存(Redis等)实现分布式锁;:维护一个主键唯一性锁表,插入表示拿到锁,别人不能插入同样的锁了。释放锁的时候,删除即可。
  3. 基于Zookeeper实现分布式锁:保证消费者按照强制性有序消费(转为同步)
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!