- 博客(6)
- 收藏
- 关注
原创 重新回顾线程
1、初始化线程的 4 种方式 1)、继承 Thread 实现代码:public static class Thread01 extends Thread { @Override public void run() { System.out.println("当前线程:" + Thread.currentThread().getId()); int i = 10 / 2; System.out
2021-11-02 19:49:33
105
原创 Redisson 完成分布式锁
1、简介 Redisson 是架设在 Redis 基础上的一个 Java 驻内存数据网格(In-Memory Data Grid)。充分 的利用了 Redis 键值数据库提供的一系列优势,基于 Java 实用工具包中常用接口,为使用者提供了一系列具有分布式特性的常用工具类。使得原本作为协调单机多线程并发程序的工具包获得了协调分布式多机多线程并发系统的能力,大大降低了设计和研发大规模分布式系统的难度。同时结合各富特色的分布式服务,更进一步简化了分布式环境中程序相互之间的协作。 官方文档:h...
2021-11-02 00:05:03
161
原创 分布式下如何加锁?
分布式锁演进-基本原理我们可以同时去一个地方“占坑”,如果占到,就执行逻辑。否则就必须等待,直到释放锁。 “占坑”可以去redis,可以去数据库,可以去任何大家都能访问的地方。 等待可以自旋的方式。分布式锁演进-阶段一代码实现: //占用分布式锁。去redis占坑 Boolean lock = stringRedisTemplate.opsForValue().setIfAbsent("locl", "111"); if (lock) ..
2021-11-01 11:43:56
760
1
原创 高并发下缓存失效问题-缓存穿透、缓存雪崩、缓存击穿
缓存穿透:指查询一个一定不存在的数据,由于缓存是不命中,将去查询数据库,但是数据库也无此记录,我们没有将这次查询的null写入缓存,这将导致这个不存在的数据每次请求都要到存储层去查询,失去了缓存的意义。缓存穿透的风险:利用不存在的数据进行攻击,数据库瞬时压力增大,最终导致崩溃。解决办法:我们将为null结果存入缓存,并加入短暂过期时间。...
2021-11-01 10:39:10
155
转载 Arraylist 与 LinkedList 区别 、ArrayList 与 Vector 区别、为什么要用Arraylist取代Vector
是否保证线程安全:ArrayList和LinkedList都是不同步的,也就是不保证线程安全; 底层数据结构:Arraylist底层使用的是Object数组;LinkedList底层使用的是双向链表数据结构(JDK1.6 之前为循环链表,JDK1.7 取消了循环。注意双向链表和双向循环链表的区别,下面有介绍到!) 插入和删除是否受元素位置的影响:①ArrayList采用数组存储,所以插入和删除元素的时间复杂度受元素位置的影响。比如:执行add(E e)方法的时候,Arra...
2021-07-17 08:19:50
514
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人