
Java
文章平均质量分 81
Java
echola_mendes
一个后端程序猿,旨在让所有的技术简单化……
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
ConcurrentHashMap图文源码解析
同HashMap一样,Segment包含一个HashEntry数组,数组中的每一个HashEntry既是一个键值对,也是一个链表的头节点。Size方法的目的是统计ConcurrentHashMap的总元素数量, 自然需要把各个Segment内部的元素数量汇总起来。数组中的每一个Entry元素,又是一个链表的头节点。但是,如果在统计Segment元素数量的过程中,已统计过的Segment瞬间插入新的元素,这时候该怎么办呢?Segment的写入是需要上锁的,因此对同一Segment的并发写入会被阻塞。原创 2024-09-11 16:28:51 · 1230 阅读 · 0 评论 -
HashMap图文源码解析
反观长度16或者其他2的幂,Length-1的值是所有二进制位全为1,这种情况下,index的结果等同于HashCode后几位的值。可以为null,但是不能为可变对象,如果是可变对象,对象中的属性改变,那么Hash也要进行相应的改变,导致下次五大找到已存在的Map中的数据。但是,因为HashMap的长度是有限的,当插入的Entry越来越多时,再完美的Hash函数也难免会出现index冲突的情况。第二步:我们查看的是Next节点Entry1,Entry1的Key是apple,正是我们要找的结果。原创 2024-08-30 16:28:47 · 770 阅读 · 0 评论 -
Java中自定义注解的使用
以【记录操作日志】为例,一般在开发中为了记录用户操作,当系统出现问题时,可以追溯日志所提供详细的错误信息,帮助开发者快速定位问题的原因最简单的方法:在每个方法中增加日志信息打印代码,来记录操作日志,但是这样重复代码也很多,也不易扩展,而且易出错使用自定义注解就会方便很多,减少不必要的重复代码,减少非业务代码的侵入性,如果需要扩展操作用户的信息以及IP就会很方便,易于扩展和维护@interface在需要使用自定义注解的地方使用该注解@LogOperation("新增")// 方法实现。原创 2024-08-22 14:33:27 · 1647 阅读 · 0 评论 -
@Transactional使用的注意事项
在项目中涉及到CRUD操作时,一般都会在方法上添加该注解,以为加上@Transactional,Spring就可以自动帮我们进行事务的开启、提交但事实上,还是会有一些坑导致事务失效。原创 2024-07-25 20:31:45 · 592 阅读 · 0 评论 -
Java之@Async注解的使用
Transactional方法内部调用 @Async 的方式,异步方法的事务是无法生效的。当方法中同时使用 @Transactional 与 @Async 时,事务是可以生效的。@Async方法内部调用@Transaction 的方式,异步方法事务是可以生效的。@Async无法进行事务管理,需要在内部使用 @Transactional。这个注解的作用在于可以让被标注的方法异步执行,但是有两个前提条件。需要异步执行的方法的所在类由Spring管理。需要异步执行的方法上添加@Async注解。原创 2024-07-24 15:27:30 · 633 阅读 · 0 评论 -
Java实现列表拖拽
在项目中,需要实现列表的上下拖拽,就是将活动当前id和目标id进行上下挤压,重新排序,每一个活动都有一个序号。直接使用Sortutils.sort工具类即可实现活动列表的拖拽功能。:将活动1拖拽到活动3的位置时,应该是活动2、活动3、活动1。:将活动3拖拽到活动1的位置时,应该是活动3、活动1、活动2。1、首先需要将需要活动id以及活动序号,添加上注解。保证分页进行拖拽后排序也是有效的。原创 2024-07-22 11:17:19 · 1031 阅读 · 0 评论 -
Java锁之可重入锁
ReentrantLock可以实现公平锁和非公平锁ReentrantLock默认实现的是非公平锁ReentrantLock的获取锁和释放锁必须成对出现,锁了几次,也要释放几次释放锁的操作必须放在finally中执行实例方法tryLock()会尝试获取锁,会立即返回,返回值表示是否获取成功实例方法tryLock(long timeout, TimeUnit unit)会在指定的时间内尝试获取锁,指定的时间内是否能够获取锁,都会返回,返回值表示是否获取锁成功,该方法会响应线程的中断。原创 2024-07-19 21:09:05 · 2163 阅读 · 0 评论 -
当@Transactional遇上@synchronized生产问题
Transactional注解通过AOP实现事务管理,当标注该注解的方法执行完成后才提交事务,而synchronized代码块又是在一个事务内,就会出现第一个线程释放锁后但是事务还没提交,第二个线程就进入同步代码块获取到未提交的数据库数。@Transactional事务管理是基于动态代理对象的代理逻辑实现的,那么如果在类内部调用类内部的事务方法,这个调用事务方法的过程并不是通过代理对象来调用的,而是直接通过this对象来调用方法,绕过的代理对象,肯定就是没有代理逻辑了。Controller类。原创 2024-07-17 11:01:53 · 1099 阅读 · 0 评论