并发
心疼我柯
这个作者很懒,什么都没留下…
展开
-
ReentrantLock源码解析
可重入锁源码分析 AQS 首节点:1.是持有锁的线程 2如果没有持有锁,则虚拟出来的线程节点。 假如T2拿到线程, T2又变成首节点了。 队首的线程不参与队列,第一人永远处于受理状态,第二个才是排队的第一个。 ReentrantLock实现了Lock接口,Lock接口中定义了一下锁需要实现的方法。类中定义了不可变的Sync属性. Sync是一个静态的抽象类,继承了AbstractQueue...原创 2019-10-22 18:24:11 · 172 阅读 · 0 评论 -
LinkedBlockingQueue 单向链表的实现
之前犯了一个错误,一直以为ArrayBlcokingQueue用的是单向链表,LinkedBlockingQueue用的是双向链表。这是一个错误的理解,在此要纠正下。 ArrayBlcokingQueue与LinkedBlockingQueue在自定义线程池的时候经常用的两种队列模式。 ArrayBlcokingQueue是 基于数组的先进先出阻塞队列。 LinkedBlockingQueu...原创 2018-08-20 15:38:36 · 613 阅读 · 1 评论 -
jedis与Lettuce
最近开发的项目需要接入redis,在网上查了一下redis的客户端分别有jedis和Lettuce 网上说jedis和Lettuce的主要区别是,jedis在多线程环境下,线程是不安全的。而 Lettuce在多线程环境下线程是安全的。 那为什么jedis在多线程环境下是不安全的呢? 1.jedis是基于redis设计的,redis本身就是单线程的,所以jedis就没有做多线程的处理。 jedis实...转载 2019-01-15 13:24:32 · 3313 阅读 · 0 评论 -
CAS总结
CAS:compare and Swap 翻译成比较并交换 偏移量: 指的是该元素在二进制文件中的位置 CAS有3个操作数,内存值V,旧的预期值A,要修改的新值B。当且仅当预期值A和内存值V相同时,将内存值V修改为B,否则什么都不做。 compareAndSet这个方法主要调用unsafe.compareAndSwapInt这个方法,这个方法有四个参数,其中第一个参数为需要改变的对象, 第二...原创 2019-09-03 15:15:00 · 261 阅读 · 0 评论 -
Redis与Mysql怎么样保证一致性
//本文是对看到的文章进行的总结,文章原地址已经忘记了 一、先更新数据库,再更新缓存(Pass) 存在的问题: //线程安全角度 A更新了数据库 B更新了数据库 因为网络的原因线程B先更新了缓存 A更新了缓存 //业务场景角度 写多读少的场景:根本没去操作读数据,而缓存就被频繁的更新,浪费性能。 二、先删除缓存,再更新数据库 场景...原创 2019-09-29 11:29:25 · 214 阅读 · 0 评论