自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(12)
  • 收藏
  • 关注

原创 redis的应用

使用offer 推送到延迟队列(RDelayedQueue), 延迟队列的消息到期后, 会移动至RBlockingQueue(阻塞队列中), 订阅者从阻塞队列中获取消息进行消费。redisson的配置。

2024-01-02 13:58:15 409 1

原创 代理的应用

不同点:jdk的动态代理要求该类必须有接口, 且只能处理接口中的方法, cglib 没有这个限制。相同点:都是为了增强某一个类中的方法。基于 cglib的动态代理。基于jdk的动态代理。

2023-12-27 10:30:26 399 1

原创 json的应用

contentType 为 application/json 时。ContentType 为formdata时。

2023-12-26 18:50:19 431 1

原创 设计模式的应用-状态模式

设计状态模式, 模拟交通灯的切换。已是红灯状态, 无需切换。

2023-12-14 19:38:30 99 1

原创 基于锁的几种更新

在规定时间内, 反复尝试获取锁, 获取到锁, 处理业务逻辑, 否则等待, 直到过期。尝试一次, 获取锁资源, 获取锁才能进行下面的操作, 否则等待, 过期释放。尝试注册节点路径, 注册成功代表获取锁。底层基于redis的setNx 命令。查询时不加锁, 更新时通过版本号。查询时加锁, 更新时不加锁。

2023-12-13 19:28:31 90

原创 集合遍历时删除元素的几种方法

CopyOnWriteArrayList在添加/删除元素时, 不直接添加元素, 先将原容器复制生成一个新的容器, 在新的容器上添加/删除元素, 之后再用原容器指向新容器, 才用了读写分离的思想, 在迭代的过程中不需要检测fast-fail异常。在test0方法中, 在集合遍历的过程中添加删除元素, 会抛出ConcurrentModificationException,在遍历的过程中, 检测到对象的并发修改, 但不允许这种修改, 就会抛出该异常。Vector:读写相同的容器, 读写互斥(加锁)

2023-12-13 16:17:45 283

原创 集合排序的几种方式

comparable:使某个类具备可排序的能力, 实现comparable, 重写compareTo 即可。comparator:比较器接口, 给不具备排序能力的对象进行排序。

2023-12-13 11:08:06 85

原创 索引覆盖和索引下推

索引下推是mysql 5.6引入的一种优化技术, 默认开启, 当使用索引下推时, explain 执行计划中extra 字段为。2.把第一步查出的索引和a>a2和c=c1 传给 mysql存储引擎, 存储引擎自行判断不符合条件的数据, 减少了回表次数。idx_abc(a, b, c) a,b,c为一个联合索引。查询一个语句时, 只用从索引中就能获取, 不必从表中获取, 无需回表。1.mysql 会先查询a>a2 的所有索引,1.mysql 会先查询a>a2 的所有索引。

2023-12-08 15:41:59 128

原创 ReentrantLock

tryLock(5, TimeUnit.SECOND): 获取锁的最大等待时间为5秒, 其间会一直申请锁。非公平锁:不按照顺序获得锁, 同时尝试获得锁, 能获取到就直接获取锁, 获取不到进入队列等待。与非公平锁类似, 多了一个前置条件, 先判断队列中是否有线程, 没有时尝试申请锁。公平锁:按照申请顺序获得锁, 所有线程在队列中排队, 队列中的第一个先拿到锁。缺点:可能会导致队列中的线程, 长时间或一直获取不到锁, 最后饿死的情况。优点:cpu不必唤醒所有线程, 减少唤醒线程的开销, 吞吐率高点。

2023-12-01 15:32:09 413 1

原创 volitale

volitale修饰的变量在修改时, 会把工作内存的值刷回主内存, 根据缓存一执性原则, 其他线程的工作内存也会把主内存中的值加载进自己的工作内存, 实现了可见性。若是情况二, 在执行外层singleton==null时, 可能对象已赋值, 返回ture, 但此时对象还未初始化, 后续在用到这个对象时, 容易出现空指针异常。在并发情况下, 两个线程同时执行1, 拿到的内存的值一样, 自增完, 值只加了一次。volitale修饰singleton对象, 禁止指令重排, 控制对象的初始化。

2023-12-01 14:31:56 119 1

原创 AQS和CAS

CAS操作包含3个操作数, 内存位置V, 预期原值A, 新值B, 在进行并发修改的时候, 先比较A和V的值是否相等, 如果相等, 把值替换为B, 否则不进行任何操作。工作原理:多个线程通过对state共享变量进行修改来实现竞态条件, 竞争失败的线程加入FIFO队列并阻塞(阻塞的前提是,当前线程所在节点的前置节点是正常状态,避免链表中存在异常线程导致无法唤醒后续线程), 抢到竞态资源的线程释放资源后, 后续的线程按照FIFO顺序实现有序唤醒。1.加入阻塞队列的线程,需要判断前置节点是否是正常状态。

2023-11-28 23:48:17 556 1

转载 mvcc的原理

转:MVCC多版本并发控制实现原理_mvcc多版本并发控制的原理-优快云博客

2023-11-24 14:55:08 68

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除