![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java杂谈
文章平均质量分 74
skindow
我们是大自然的搬运工
展开
-
AQS 独占式锁和条件锁ReentrantLock 和 Condition 带你深入了解原理及源码分析
ReentrantLock 构造图构造函数 /** * Creates an instance of {@code ReentrantLock}. * This is equivalent to using {@code ReentrantLock(false)}. */ //构建一个非公平锁 public ReentrantLock() { sync = new NonfairSync(); } /**原创 2021-03-09 16:54:07 · 235 阅读 · 0 评论 -
HashSet源码分析
1. 无参构造方法HashSet() public HashSet() { map = new HashMap<>(); }可以看出HashSet是内部通过HashMap来实现的,关于HashMap源码分析可以看我写的这篇文章HashMap源码分析2. 有参构造方法HashSet(Collection<? extends E> c) public HashSet(Collection<? extends E> c) {原创 2021-03-09 09:37:15 · 116 阅读 · 0 评论 -
ThreadLocal源码分析
一. 用途多个线程存在并行访问一个非线程安全的对象时,并且无需共享给其他线程使用,这个时候可以用Thread给每个线程产生一个每个线程独立的副本,各副本之间互不影响二. 源码解读set 方法 public void set(T value) { Thread t = Thread.currentThread(); //每个Thread类 都有一个ThreadLocalMap成员变量 ThreadLocalMap map = getMap(t)原创 2021-03-08 11:54:13 · 123 阅读 · 0 评论 -
JEXL表达式引擎学习demo
实体类package com.skindow.jexl;import lombok.Data;import lombok.extern.slf4j.Slf4j;import java.util.*;/** * @ Author :syc. * @ Date :Created in 14:08 2020/9/10 * @ Description: * @ Modified By: * @ Version: */@Data@Slf4jpublic abs.原创 2020-09-10 15:09:10 · 668 阅读 · 0 评论 -
jvm 解读笔记附个人理解
一. java源文件被执行的过程1.编译java 通过javac编译器 编译成Class文件.class结尾2.加载class文件被jvm以字节码形式加载到内存当中,而加载则是由jvm提供的加载器来完成的,加载完成后会创建一个java.lang.Class对象,当这个对象被创建以后不会被二次创建,正如每个对象都有自身唯一id一样,而判断他们是否相同则由类的包路径和类的类名称来组成,但是在加...原创 2020-05-07 14:56:25 · 236 阅读 · 0 评论 -
使用java反射和AOP对比两个对象的属性来实现修改操作日志记录功能
使用注解来声明对象的哪些属性需要比对,新建注解package com.skindow.annotion;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.a...原创 2019-09-24 16:51:22 · 2825 阅读 · 5 评论 -
java1.8 HashMap源码深入解读
参考文章:https://blog.csdn.net/v123411739/article/details/78996181https://blog.csdn.net/hzau_itdog/article/details/86085344概述在1.8版本之前一直是数组加上链表的结构,1.8版本引入了红黑树,也就是用空间来换取时间,所以现在的结构就变成了数组+红黑树+链表前言:先了解以下...原创 2019-08-22 17:07:41 · 492 阅读 · 0 评论 -
java1.8 ArrayList源码解读
概述在日常使用当中,ArrayList使用率非常频繁,它基于数组的线性结构,由于添加时都是向末端添加且是连续的所以它表现为有序性,每个元素都对应一个下标,通过下标来获取数据,所以时间复杂度表现为O(1),不受元素的多少影响。在存储上,它是连续性的,所以在存放ArrayList时,需要一块没有碎片的完整的内存区域用来存放ArrayList,并且该内存的大小需要大于等于ArrayList的大小。...原创 2019-08-21 18:11:03 · 115 阅读 · 0 评论 -
利用java反射给集合其中的某个属性做模糊匹配进行过滤
/** 根据filterName以list中fileName属性进行模糊匹配 * @param list 需要过滤的集合 * @param fileName 属性名称 * @param fileterName 模糊匹配的值 * @return */ public static List filterByNameLike(List lis...原创 2019-07-30 10:29:03 · 1617 阅读 · 0 评论 -
通过jdk和cglib的动态代理计算执行方法的时间,用于测试List集合有参与无参的性能差异
参考文章:https://www.cnblogs.com/Pjson/p/8783284.htmlJDK动态代理步骤1.创建一个实现InvocationHandler接口的类,它必须实现invoke()方法2. 创建被代理的类及接口3. 调用Proxy的静态方法,创建一个代理类4.通过代理调用方法根据以上步骤1,创建一个工厂类,思路:通过该工厂类将一个目标对象生成目标代理类,这里通过...原创 2019-07-30 12:06:04 · 519 阅读 · 0 评论 -
探讨for循环向list添加对象几种常见写法的性能差异
1,for循环外部创建引用对象,并且引用完 将其指向null ==》 t = new Integer(i); t = null;package com.skindow.forInterface;import java.util.ArrayList;import java.util.List;/** * Created by Administrator on 2019/7/30. ...原创 2019-07-30 16:38:09 · 1824 阅读 · 1 评论