- 博客(11)
- 收藏
- 关注
原创 双检锁创建单例为什么会出现空指针
上面错误双重检查锁定的示例代码中,如果线程 1 获取到锁进入创建对象实例,这个时候发生了指令重排序。当线程1 执行到 t3 时刻,线程 2 刚好进入,由于此时对象已经不为 Null,所以线程 2 可以自由访问该对象。以上代码 2,3 可能发生重排序,但是并不会重排序 1 的顺序。也就是说 1 这个指令都需要先执行,因为 2,3 指令需要依托 1 指令执行结果。看似没有问题,其实不然,出现空指针的原因是因为用new创建对象时并不是一个原子操作,使用java-c可以快速查看字节码。找了个图方便大家理解。
2024-06-16 16:40:44
356
2
原创 IOC与DI
ioc就是一个巨大的容器,里面保存很多对象的实例,主要设计ioc控制反转,即将对象的创建的控制权交给ioc,由ioc管理bean的创建及管理,ioc容器创建的对象叫做bean对象。那么怎么能将其加入到ioc容器中,那么就需要在类上加上@Component,为了更好的区分这个bean来自哪一层,又引入了@Controller (标注在控制层类上)@Service (标注在业务层类上)@Mapper(标注在数据访问层类上)那么我加入到了ioc容器中我如何实现将bean引入到我的类中去呢?
2024-06-02 15:02:14
377
原创 redis在如何在springboot中使用
当前配置类不是必须的,因为 Spring Boot 框架会自动装配 RedisTemplate 对象,但是默认的key序列化器为。JdkSerializationRedisSerializer,导致我们存到Redis中后的数据和原始数据有差别,故设置为。database:指定使用Redis的哪个数据库,Redis服务启动后默认有16个数据库,编号分别是从0到15。在application.yml中添加读取application-dev.yml中的相关Redis配置。在test下新建测试类。
2024-05-29 23:56:03
218
原创 反射的使用
虽然说反射在开发中很少用到,但它可以帮助你去理解了解,都知道spring是基于动态代理来实现的,而动态代理又是基于反射的,也就是说你熟练掌握的了反射,你就熟练掌握了如何开发框架,哈哈哈哈开个玩笑。
2024-05-29 23:42:23
709
原创 Stream流
虽然说这是1.8的“新特性”,但我相信仍有部分同僚还没能掌握,当然这并不是什么多牛逼的技能,但其可以帮助我们能看懂同事写的代码,避免扯皮。这篇文章将会介绍stream流的使用,相信看完会有不小的收获,废话不多说,步入正题。
2024-05-28 23:56:06
979
原创 优雅的判空
在开发时最常见的异常就是空指针异常,在网上有个段子说程序员一日三空,常规的判断就是嵌套大量的if啥啥啥不等于 null如下;为了方便描述,这边建了三个实体类。
2024-05-28 22:03:34
246
原创 利用字典树进行字符串替换
先来介绍下什么是字典树吧,与大多数树状结构无异,都是从根节点出发下面有子节点,对子节点的管理是通过一个字典来进行管理的,也就是map,说到这很多朋友就反应过来了,为了方便理解我给附上图,bi站上的动画做的通俗易懂。"****"肯定都见过吧,我们最先想到的肯定是暴力for循环,那如果敏感词足够多呢,那么其效率可想而知,最近进行学习时发现了可以利用字典树进行实现这一个步骤。具体实现呢我这已经描述的非常清楚了,有不懂的可以评论区回复,并且在写这篇文章时自己发现了个小bug,不知道有没有眼尖朋友看出来。
2024-05-27 20:40:26
729
原创 异步任务CompletableFuture
CompletableFuture能够联想到的是Future,其次呢,其还实现了CompletionStage,这个作用呢就是对一些执行时间比较长的任务进行拆分。然后调用CompletableFuture.supplyAsync()跟allof().join()方法去完成任务的执行。在使用的时候呢需要提供一个线程池(线程工厂跟拒绝策略是默认的,为方便,为未指定,有需求可自行添加)
2024-05-19 23:48:18
195
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅