ICode9

精准搜索请尝试: 精确搜索
  • 三种分布式锁详解2022-01-31 21:33:18

    Java中的锁主要包括synchronized锁和JUC包中的锁,这些锁都是针对单个JVM实例上的锁,对于分布式环境如果我们需要加锁就显得无能为力。在单个JVM实例上,锁的竞争者通常是一些不同的线程,而在分布式环境中,锁的竞争者通常是一些不同的线程或者进程。如何实现在分布式环境中对一个对象进行

  • HashMap理解2022-01-31 14:32:11

    HashMap Java8 对 HashMap 进行了一些修改,最大的不同就是利用了红黑树,所以其由 数组+链表+红黑 树 组成。 当链表中的元素超过了 8 个以后, 会将链表转换为红黑树 HashMap扩容机制 capacity 即容量,默认16。 loadFactor 加载因子,默认是0.75 threshold 阈值。阈值=容量*加载因子。默

  • 【并发编程】synchronized在设计上的锁优化2022-01-30 15:04:30

    批量重偏向、批量撤销 从偏向锁的加锁解锁过程中可看出,当只有一个线程反复进入同步块时,偏向锁带来的性能开销基本可以忽略。当有其他线程尝试获得锁时,就需要等到safe point时,再将偏向锁撤销为无锁状态或升级为轻量级,会消耗一定的性能。在多线程竞争频繁的情况下,偏向锁不仅不

  • 【并发编程】synchronized在设计上的锁优化2022-01-30 15:02:44

    批量重偏向、批量撤销 从偏向锁的加锁解锁过程中可看出,当只有一个线程反复进入同步块时,偏向锁带来的性能开销基本可以忽略。 当有其他线程尝试获得锁时,就需要等到safe point时,再将偏向锁撤销为无锁状态或升级为轻量级,会消耗一定的性能。 在多线程竞争频繁的情况下,偏向锁不仅不能

  • 2022-01-30 01:31:08

    十五、锁 在数据库中,除传统的计算资源(如CPU、RAM、I/O等)的争用以外,数据也是一种供许多用户共享的资源,当数据库有并发事务的时候,可能会产生数据的不一致,这时候需要一些机制来保证访问的次序,锁机制就是这样的一个机制。 1 锁分类 1.1 按操作类型分 读锁(共享锁):当用户要进行数据的读

  • MySQL 幻读的理解2022-01-29 18:01:48

    首先我们要搞明白何谓幻读,目前网上的众多解释幻读的博文个人感觉仔细设想一下就能找出推翻的例子,就像博文把 非阻塞IO 等同为 异步IO,然后好多文章都纷纷借用,其实这俩货是完全不同,非阻塞IO 是 同步IO 中的一种模式,并非 异步IO。错误的观点都被大众认同的 “正确化” 了,扯远了,

  • 初识分布式锁(二):ZooKeeper分布式锁原理浅析及实战案例2022-01-29 12:35:12

    初识分布式锁(二):ZooKeeper分布式锁原理浅析及实战案例 写作不易,点赞收藏关注以便下次再看,感谢爸爸们的支持~ 上回咱们说到,用Mysql数据库实现了分布式锁。实现起来相对简单。 但是缺陷也相对比较明显,一方面是SQL锁没有过期机制,如果不保持高可用的情况下,线程没有释放掉锁就会出

  • 缓存:SpringCache的不足2022-01-28 01:05:36

           springcache默认是不加锁的,也就默认是不能解决缓存击穿问题的。 解决方法:手写加锁逻辑。或者 注解中写属性 sync =true    对于常规数据,写模式,只要缓存的数据有过期时间就足够了。  

  • 缓存:分布式锁原理与使用2022-01-27 01:32:53

        用redis的 set   nx 命令。       阶段一  ,代码改进: @Override public Map<String, List<Catelog2Vo>> getCatelogJson() { //加入缓存逻辑 ValueOperations<String, String> ops = stringRedisTemplate.opsForValue(); String json

  • 【Redisson】分布式锁缺点2022-01-26 15:35:55

        如果加锁的redis master 故障,刚好数据也还没有同步到slave,那其他加锁的客户端则会再次加锁成功,则相当于有两个客户大都拿到了锁。   使用 Redisson 实现分布式锁方案最大的问题就是如果你对某个 Redis Master 实例完成了加锁,此时 Master 会异步复制给其对应的 slave 实例。

  • 单线程快还是多线程快2022-01-25 23:59:00

    分情况 cpu有浪费的是多线程快 start 表示就绪态 不是立即执行 wait 表示cpu等待 不能被选中 子线程执行完之后跟主线程没有关系(没有谁先执行谁后执行) 方法里面声明的变量是绝对安全的,是拷贝的(不管是静态的还是动态的方法都是绝对安全)  但是:定义在方法外的变量不安全 加锁的

  • java锁机制小总结2022-01-25 20:04:36

    马上春招了,总结一下锁机制,看了好多博客学到了很多,自己在总结一下 我们常常听到的锁相关名词有一下几种 公平锁/非公平锁可重入锁独享锁/共享锁互斥锁/读写锁乐观锁/悲观锁分段锁偏向锁/轻量级锁/重量级锁自旋锁 下面一 一展开概念解释 一、 公平锁/非公平锁 1.公平锁:多个线程

  • 分布式锁(二)--Redis实现分布式锁2022-01-24 16:04:12

    目录一、背景:二、Redis实现可靠性分布式锁的条件:三、加锁思路:四、释放锁思路:1、为什么使用lua脚本:2、为什么使用随机值呢?五、代码实现:六、存在的问题:七、Redisson实现分布式锁:1、背景:2、加锁:看门狗3、解锁: 一、背景: 前面了解了分布式锁,做了最简单的入门了解,分布式锁(一)--基础 这里

  • mysql 锁机制2022-01-24 10:34:23

    锁是为了保护某一个资源同时被多个进程或线程修改,从而造成数据混乱。锁粒度:   表级锁:对整张表加锁,开销小,加锁快,不会出现死锁,锁粒度大,锁竞争概率高,并发效率低   行级锁:对某行主键索引,开销大,加锁慢,会出现死锁,锁粒度小,锁竞争概率低,并发效率高  运用场景不同,选择合理锁,表级锁更

  • Java基础面试突击2022-01-23 14:35:16

    Java的基础知识面试总结。 文章目录 一、讲讲线程与进程的区别二、知道synchronized原理吗?三、锁的优化机制了解吗?四、对象头具体都包含哪些内容?五、对于加锁,那再说下ReentrantLock原理?他和synchronized有什么区别?六、CAS的原理呢?那么CAS有什么缺点吗?七、说说HashMap原理吧

  • Redis 分布式锁的正确实现原理演化历程与 Redisson 实战总结2022-01-22 21:30:46

    https://mp.weixin.qq.com/s/rRNJO8q02Mn7egGxaiVj6A Redis 分布式锁的正确实现原理 演化历程与 Redisson 实战总结 Redis 分布式锁使用 SET 指令就可以实现了么?在分布式领域 CAP 理论一直存在。 分布式锁的门道可没那么简单,我们在网上看到的分布式锁方案可能是有问题的。 「

  • java中的syncronized2022-01-21 01:01:31

    目录1、为什么会需要synchronized?什么场景下使用synchronized?2、synchronized 作用范围3.1、三种作用范围加锁的区别3.2、 JVM 是怎么通过synchronized 在对象上实现加锁,保证多线程访问竞态资源安全的3.3、对象头的理解3.3.1、synchronized 是公平锁还是非公平锁吗?3.4、JDK 6 以来

  • 【Redisson】二.可重入锁-lua脚本加锁逻辑源码2022-01-20 18:01:36

    前言   主要介绍Redisson可重入锁,通过lua脚本加锁的逻辑源码 目标代码 //通过getLock获取RLock对象,进行加锁 RLock lock = redissonClient.getLock("serviceKey"); lock.lock(); //getLock源码 @Override public RLock getLock(String name) {   return new RedissonLock(con

  • Redis分布式锁实现简述2022-01-20 16:02:49

    一、分布式锁使用的情形如下,下图中单机锁不能保证资源互斥 一般来说分布式锁使用第三方(外部)系统来保证互斥,常见的有Zookeeper,MySQL,Redis,所有的分布式锁构建都应该注意以下几点要素 1:不能有死锁,进程不能因为出现异常就不释放锁 2:进程在锁上要有唯一标识,只能释放自己加的锁 3:保证

  • C++ std::lock_guard和std::unique_lock2022-01-19 18:05:30

    std::lock_guard lock_guard是采用RAII手法封装的一个类,功能与mutex一样其在构造时自动对mutex进行锁定(lock),在析构函数中自动对mutex进行解锁(unlock) // g++ main.cpp -lpthread #include <algorithm> #include <condition_variable> #include <list> #include <mutex> #incl

  • Golang sync.Mutex包——互斥锁2022-01-19 13:34:45

    1、概述 Mutex 是一个互斥锁,可以创建为其他结构体的字段;零值为解锁状态。Mutex 类型的锁和线程无关,可以由不同的线程加锁和解锁。 type Mutex struct { state int32 sema uint32 } 2、方法 Mutex是一个互斥锁,可以创建为其他结构体的字段;零值为解锁状态。Mutex类型的锁和线程

  • 使用 Redis 如何设计一个分布式锁2022-01-19 12:58:00

    前言 现在的业务应用通常都是微服务架构,如果一个应用部署多个进程,那这多个进程如果需要修改操作同一行记录时,为了避免操作乱序导致数据错误,此时,我们就需要引入分布式锁来解决这个问题了。 而实现分布式锁,大多有以下三种方式实现: 使用 MySQL 实现 使用 Redis 等缓存系统实现 使用

  • synchronized的内部原理2022-01-15 21:57:59

    synchronized synchronized具体实现,这个是在JVM内部完成的 开始使用的时候是乐观锁,如果发现锁的冲突率比较高,就会自动转换为乐观锁synchronized不是读写锁synchronized开始的时候是轻量级锁,如果锁被持有的时间较长/锁的冲突概率较高,就会升级成重量级锁synchronized是一个非公

  • Linux系统编程-(pthread)线程通信(读写锁)2022-01-10 22:02:22

    1. 读写锁介绍 读写锁与互斥锁类似,读写锁比互斥锁有更高的并行性,读写锁特点如下: ​ 1. 读写锁有三种状态,读模式下加锁(共享)、写模式下加锁(独占)以及不加锁。 ​ 2. 一次只有一个线程可以占有写模式下的读写锁;但是多个线程可以同时占有读模式下的读写锁。 ​ 3. 读写锁在写加锁

  • 调用函数,是否需要加锁2022-01-10 10:33:10

    对于函数的局部变量,会存储在所属线程的栈中; 而如果函数用到全局数据,如链表,是存储在堆上,那就存在数据安全问题,必须要对函数访问加锁。   可重入函数: 简单来讲,就是可以被中断的函数,也就是说,可以在这个函数执行的任何时刻中断它,转入OS调度下去执行另外一段代码,而返回控制时不会出现

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有