java
奕超
玩技术,玩人生
展开
-
赏析ReentrantLock源码
公平锁 VS 非公平锁FairSync:按照请求锁的顺序来分配锁NonfairSync:上来直接先请求锁,不按顺序 ReentrantLock 可重入锁,再一个线程中可多次获取到该锁;主要通过AQS实现一般情况下ReentrantLock的使用过程//先获取锁lock.lock();try { ... //业务逻辑} finally{ //finally块进行锁的释放,原创 2017-08-31 18:59:03 · 1027 阅读 · 0 评论 -
atomic包之AtomicBoolean
atomic简介 atomic意思是原子;atomic是java.util.concurrent下的专门为线程安全设计的Java包,包含多个原子操作类,主要通过CAS来确保多线程下操作的安全性;AtomicBoolean源码 public class AtomicBoolean implements java.io.Serializable { private static fina原创 2017-08-22 22:52:11 · 429 阅读 · 0 评论 -
聊聊ClassLoader与jdbc的关系(contextClassLoader)
背景 在前面聊到ClassLoader是如何工作的,有些时候ClassLoader的双亲委托机制不能完成一些特定的类加载任务,比如java提供一些SPI,由厂商来进行具体的实现,比如jdbc,各个数据库厂商根据java提供的SPI来实现各自数据库的连接;这些SPI都定义在核心类里,由bootstrap ClassLoader加载,而在SPI 接口中的代码经常需要加载具体的实现类,但厂商的具...原创 2017-06-29 00:12:45 · 2046 阅读 · 0 评论 -
聊聊ClassLoader
什么是ClassLoader java程序在编写的时候都是.java文件,但真正去运行的时候都是加载编译后的.class文件,而不是.java文件;一般项目都不会由单个类构成,这涉及到类的依赖,相互协作完成复杂的业务功能,而在程序启动的时候不会一次性加载程序所要用到的所有class文件,而是根据需要,在用到的时候通过类加载器加载到内存中,然后被其他class引用;ClassLoader是怎样工原创 2017-06-28 09:18:31 · 465 阅读 · 0 评论 -
JDK8的@CallerSensitive
在看java.lang.reflect.Proxy源码的时候看到有一行代码调用Reflection.getCallerClass(),这是个native方法,但这个方法上有个注解:@CallerSensitive,比较好奇,研究一下权限Reflection.getCallerClass()此方法的调用者必须有权限,需要什么样的权限呢? 由bootstrap class loader加载的类可以原创 2017-05-17 02:15:36 · 18679 阅读 · 7 评论 -
动态代理源码解析之JDK
程序员基本都知道有个模式叫代理模式,其实质就是调用由代理类发起,再由代理类来进行调用真实的业务类来调用,实现业务控制,在代理类的处理中,可以在真实的业务类调用前面和后面进行逻辑处理; 而动态代理跟普通的代理模式在代码编写上是有区别的,动态代理的代理类class是动态生成的; 动态代理的应用场景很广,最被人熟知的当属spring的AOP,AOP的应用场景非常广泛,比如权限控制,缓存原创 2017-05-17 00:27:54 · 350 阅读 · 0 评论 -
java两个比较常用的工具方法代码
开发中有没有经常遇到List要转成Map的情况,通过List返回另外一个List的情况,有的话,可以把下边代码拿走用了List转Listpublic static <T,V> List<V> transferList(List<T> orgList, Function<T, V> function) { if(CollectionUtils.isEmpty(orgList)) {原创 2017-05-19 18:53:52 · 1827 阅读 · 0 评论 -
我觉得应该这样写单元测试(java)
每个人对待单元测试的态度各异,有些人觉得单元测试很重要,有些人觉得单元测试可以不写;我对单元测试的态度是肯定的。存在的问题进入新团队半年多了,感觉团队小伙伴对单元测试的写法及认知存在不合理的地方,比如很多单元测试就是调用一下方法,没有对数据进行构造,也没有数据回滚,也没有对期望结果的比对,单元测试的正确性靠打印或者数据库数据查看,这种单元测试其实在很多情况下是不可重复执行和完全自动化的。单元测原创 2017-05-12 23:08:12 · 2617 阅读 · 0 评论 -
java的equals和hashCode
初学者经常看到网上有博文推荐重写实体的equals和hashCode方法,而却hashCode的生成的关联属性和equals比较的属性要一直,但是不知道为什么要这样,现在用实例来说明为什么要一致程序员:do not talk,show me the code实体类:public class Person { private int age; private String na原创 2017-05-11 20:22:49 · 443 阅读 · 0 评论 -
java使用Arrays asList需要注意了
Arrays.asList相信搞java的基本都用过,但有些坑不一定踩过坑一Arrays.asList返回的List不能进行add和remove操作,为什么呢,来看看源码就明白了@SafeVarargs@SuppressWarnings("varargs")public static <T> List<T> asList(T... a) { return new ArrayList原创 2017-05-11 14:18:26 · 801 阅读 · 0 评论 -
guava 源码之 Lists transform的坑
google的guava提供了很方便的操作,特别是集合操作; 但今天遇到了个神坑,看了源码才搞定,这里通过源码来分享下;经过项目里的代码将PO List转成DTO List,这个时候是通过Lists的transform方法来做的但是DTO还需要其他属性来丰富,这个时候,通过for循环将其他的一些属性设置到DTO List的对象中去结果,没设置进去开发大杀器(debug)上,断点到fo原创 2017-05-11 14:22:46 · 3803 阅读 · 3 评论 -
joda-collection 之 Grid源码解析
joda-collection官网说明了是提供jdk和guava之外的collection操作,所以提供了Grid操作; Grid顾名思义就是网格的意思,也就是有个(x,y)坐标确定一个元素;如何引入现在基本都是采用maven构建方式,在需要的项目pom中添加依赖:<dependency> <groupId>org.joda</groupId> <artifactId>joda-co原创 2017-05-11 14:02:54 · 363 阅读 · 0 评论 -
java类该不该实现finalize方法
我们知道java的自动垃圾回收过程中,当我们自定义的类实现了Object的finalize方法时,对象被回收前肯定会调用该方法。今天来剖析一下这个过程,以及要不要通过finalize方法来做一些业务,哪些场景不适合来做这个事情呢?过程先看测试代码public class FinalizeTest { @Override protected void f...原创 2018-08-12 01:45:03 · 707 阅读 · 0 评论