Java静态代理动态代理总结

代理模式是一种设计模式,提供了对目标对象额外的访问方式,即通过代理对象访问目标对象,这样可以在不修改原目标对象的前提下,提供额外的功能操作,扩展目标对象的功能。 简言之,代理模式就是设置一个中间代理来控制访问原目标对象,以达到增强原对象的功能和简化访问方式。 代理模式UML类图 总结 静态代理实现较简单,只要代理对象对目标对象进行包装,即可实现增强功能,但静态代理只能为一个目标对象服务,如果目标对

Java设计模式之动态代理CGLib版

代理模式是一种设计模式,提供了对目标对象额外的访问方式,即通过代理对象访问目标对象,这样可以在不修改原目标对象的前提下,提供额外的功能操作,扩展目标对象的功能。 简言之,代理模式就是设置一个中间代理来控制访问原目标对象,以达到增强原对象的功能和简化访问方式。 代理模式UML类图 动态代理CGLib版 cglib is a powerful, high performance and quality

Java设计模式之动态代理JDK版

代理模式是一种设计模式,提供了对目标对象额外的访问方式,即通过代理对象访问目标对象,这样可以在不修改原目标对象的前提下,提供额外的功能操作,扩展目标对象的功能。 简言之,代理模式就是设置一个中间代理来控制访问原目标对象,以达到增强原对象的功能和简化访问方式。 代理模式UML类图 动态代理JDK版 动态代理利用了JDK标准库API,动态地在内存中构建代理对象,从而实现对目标对象的代理功能。动态代理又

Java设计模式之静态代理模式

代理模式是一种设计模式,提供了对目标对象额外的访问方式,即通过代理对象访问目标对象,这样可以在不修改原目标对象的前提下,提供额外的功能操作,扩展目标对象的功能。 简言之,代理模式就是设置一个中间代理来控制访问原目标对象,以达到增强原对象的功能和简化访问方式。 代理模式UML类图 静态代理 静态代理需要代理对象和目标对象实现一样的接口。 优点: 1、可以在不修改目标对象的前提下扩展目标对象的功能。

ThreadLocal深度解析

ThreadLocal:为共享变量在每个线程中创建一个副本,每个线程可以访问自己内部的副本变量。 ThreadLocal是什么 ThreadLocal是一个本地线程副本变量工具类。主要用于将私有线程和该线程存放的副本对象做一个映射,各个线程之间的变量互不干扰,在高并发场景下,可以实现无状态的调用。 数据结构图 从上面的结构图,我们已经窥见ThreadLocal的核心机制: 每个Thread线程内部
ThreadLocal深度解析

IPv4地址转Int之Java实现

讲个故事 面试官:IPv4地址可以转为Long类型的数字知道吧?你写一下这个转换的代码! 对计算机基础逐渐模糊的小徐一脸懵逼,毕竟工作中很少会用到,只记得IP地址和整数是可以相互转换的,但是从来没有自己实现过。于是在大脑中飞速计算。过了一会,思路出现了:IP地址分为四段,每段都是0~255之间的数,每段可以用8位来装下它,4x8=32位,也就是可以将IP地址转为32位的整数。咦?面试官居然让转成L
IPv4地址转Int之Java实现

Java生产者消费者模型实践五

回顾前面做一些实验,你会发现,实现一的并发性能高于实现二、三。暂且不关心BlockingQueue的具体实现,来分析看如何优化实现三(与实现二的思路相同,性能相当)的性能。 分析实现三的瓶颈 最好的查证方法是记录方法执行时间,这样可以直接定位到真正的瓶颈。但此问题较简单,我们直接用“瞪眼法”分析。 实现三的并发瓶颈很明显,因为在锁 BUFFER_LOCK 看来,任何消费者线程与生产者线程都是一样的
Java生产者消费者模型实践五

Java生产者消费者模型实践四

我们要保证理解wait && notify机制。实现时可以使用Object类提供的wait()方法与notifyAll()方法,但更推荐的方式是使用java.util.concurrent包提供的Lock && Condition。 package com.github.xuchengen.concurrent.impl; import com.github.xuc
Java生产者消费者模型实践四

Java生产者消费者模型实践三

如果不能将并发与容量控制都封装在缓冲区中,就只能由消费者与生产者完成。最简单的方案是使用朴素的wait && notify机制。 package com.github.xuchengen.concurrent.impl; import com.github.xuchengen.concurrent.AbsConsumer; import com.github.xuchengen.c
Java生产者消费者模型实践三