Java进阶
业精勤而荒嬉
知其然知其所以然
展开
-
双亲委派模式破坏-JDBC
关于类加载机制推荐这篇:深入探讨Java类加载机制关于双亲委派模式的破坏,如Tomcat的类加载机制JDBC之所以要破坏双亲委派模式是因为,JDBC的核心在rt.jar中由启动类加载器加载,而其实则在各厂商实现的的jar包中,根据类加载机制,若A类调用B类,则B类由A类的加载器加载,也就是说启动类加载器要加载jar包下的类,我们都知道这是不可能的,启动类加载器负责加载$JAVA_HOME中jr...原创 2019-01-31 19:46:52 · 5199 阅读 · 4 评论 -
HashMap源码解析
HashMap系列文章:红黑树HashMap源码解析-红黑树操作LinkedHashMap源码解析(JDK8)HashMap底层数据结构:散列表+红黑树。关于散列表,采用拉链法处理hsah冲突,引入红黑树来提升效率。数组+链表+红黑树上图就是一个Node数组transient Node<K,V>[] table;每个黑点就是个Node ...原创 2018-05-22 00:12:00 · 402 阅读 · 0 评论 -
Netty心跳机制的使用实例
我们将客户端对服务端发送的数据封装成MyRequest对象,服务端的回应封装成MyResponse对象,我们用Protostuff来序列化,底层通信实现采用Netty,实现心跳机制,当客户端一段时间没有向服务端发出请求就主动发一个PING过去,告诉服务端自己还活着,服务端接收后就回个PONG;服务端一段时间没收到请求就断开与客户端的长连接。关于Protostuff的使用看这篇Protostuff...原创 2019-03-25 12:30:25 · 660 阅读 · 0 评论 -
Protostuff序列化框架的使用及Objenesis的使用
import io.protostuff.LinkedBuffer;import io.protostuff.ProtostuffIOUtil;import io.protostuff.Schema;import io.protostuff.runtime.RuntimeSchema;import java.util.Map;import java.util.concurrent.Co...原创 2019-03-25 11:32:10 · 358 阅读 · 0 评论 -
BeanDefinitionRegistryPostProcessor与动态代理配合使用例子
我们想要实现这样一种功能:我们自定义了一个注解@MyReference,@Target(ElementType.FIELD)@Retention(RetentionPolicy.RUNTIME)public @interface MyReference{}在项目里被它注解的字段是就是我们要代理的类,我们希望在Spring启动时将代理类注入到这些被该注解标识的字段。那么有两点需要解决...原创 2019-03-25 07:12:18 · 2519 阅读 · 2 评论 -
深入浅出QPS、RT和最佳线程数
转载自:深入浅出QPS、RT和最佳线程数阿姆达尔定律什么是QPS:QPS是每秒钟处理完请求的次数。这里的请求不是指一个查询或者数据库查询,是包括一个业务逻辑的整个流程,也就是说每秒钟响应的请求次数。什么是响应时间:响应时间即RT,处理一次请求所需要的平均处理时间。对于RT,客户端和服务端是大不相同的,因为请求从客户端到服务端,需要经过广域网,所以客户端RT往往远大于服务端RT,同时客户...转载 2019-03-04 17:11:27 · 1333 阅读 · 0 评论 -
JUC源码解析-阻塞队列-LinkedBlockingQueue与ArrayBlockingQueue
什么是阻塞队列?阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附加的操作是:在队列为空时,获取元素的线程会阻塞等待,直到队列变为非空或超时。当队列满时,存储元素的线程会等待队列可用。阻塞队列常用于生产者和消费者的场景。阻塞队列提供了四种处理方法:抛出异常:是指当阻塞队列满时候,再往队列里插入元素,会抛出IllegalStateException(“Q...原创 2019-02-28 23:13:07 · 311 阅读 · 0 评论 -
JUC源码解析-阻塞队列-迭代器(二)
4,删除remove public void remove() { // assert lock.getHoldCount() == 0; final ReentrantLock lock = ArrayBlockingQueue.this.lock; lock.lock(); try ...原创 2019-02-28 16:56:02 · 246 阅读 · 0 评论 -
JUC源码解析-阻塞队列-迭代器(一)
本篇来分析下阻塞队列里迭代器的实现,以ArrayBlockingQueue源码来分析。首先在开始前想一想,如何实现阻塞队列的迭代器功能?在并发下有些线程在读,有些在改,还有些在使用迭代器遍历,怎么确保安全性?用独占锁将这些操作隔离开,我们看 ArrayBlockingQueue 确实是这么做的。既然安全性得到保障那么还有什么问题是需要考虑的 ?过时数据问题。假设一个线程从此时的 takeI...原创 2019-02-28 16:55:41 · 406 阅读 · 0 评论 -
spring事件发布机制
关于Java的事件监听机制Spring事件机制是观察者模式的一种实现,但是除了发布者和监听者者两个角色之外,还有一个EventMultiCaster的角色负责把事件转发给监听者。观察者模式Spring的事件监听(也称事件驱动)是观察者模式的一种实现,比较常见的有发布-订阅模型。通常我们利用消息队列来实现不同系统之间的解耦,如用户注册完成后,可以向消息队列发布一条消息,然后订阅了此topic的...原创 2019-02-08 06:28:32 · 1274 阅读 · 0 评论 -
java.lang.Class.isPrimitive()
用来判断Class是否为基本数据类型,有九种预定义的Class对象代表的八个基本类型和void。这些都是由Java虚拟机创建的,并且具有相同的名称,它们代表即boolean, byte, char, short, int, long, float, 和double 等原始类型。public static void main(String[] args){ Class stringCla...原创 2019-02-04 07:57:23 · 508 阅读 · 0 评论 -
Java-SPI
SPI即Service Provider Interface,Service提供者接口:提供给服务提供厂商与扩展框架功能的开发者使用的接口。java spi提供这样的一个机制:为某个接口寻找服务实现的机制。有点类似IOC的思想,就是将装配的控制权移到程序之外,在模块化设计中这个机制尤其重要。很多框架都使用了java的SPI机制,如JDBC4中的java.sql.Driver的SPI实现(mys...原创 2019-02-01 17:33:34 · 440 阅读 · 0 评论 -
HashMap源码解析-红黑树操作
距离上一篇分析HashMap的文章已经过去一年了,今天偶尔翻到之前的那篇,还记得当时是打算另起一篇来分析链表的树化,以及树的链表化过程,结果这一拖就是一年原创 2019-06-23 10:58:56 · 1099 阅读 · 1 评论