- 博客(54)
- 资源 (2)
- 收藏
- 关注
原创 4 ThreadLocal-TransmittableThreadLocal源码分析
TransmittableThreadFactory 源码分析
2022-09-22 21:15:04 343
原创 5 Spring ApplicationListener 扩展版
Spring ApplicationListener EventListener
2022-08-10 11:31:14 234
原创 3 代理-动态代理-CGLIB
代理模式什么是代理模式设计模式中,代理模式是我们经常说到的,也是我们经常使用。代理模式:为一个对象(被代理类、委托类)提供一个替身(代理对象),用来控制被代理对象的访问控制,被代理的对象可以是远程的对象、创建开销大的对象、需要安全控制的对象。现实中常见的代理模式:租房/买房中介、明星的经纪人等。为什么要用代理模式中介隔离作用:在某些情况下,一个使用者不想或者不能直接引用一个被代理对象,而代理类对象可以在使用者和被委托对象之间起到中介的作用,其特征是代理类和委托类实现相同的接口。开闭原则,增加功
2021-04-19 17:44:13 125
原创 2 代理-动态代理-JDK
动态代理考虑到静态代理的缺点,如果系统能自动生成代理类,我们只需要考虑相关代理功能的实现,是最好的。实现动态代理有两种方式:所有的目标类都有一个共同的父类(接口),这样代理对象只需要实现接口,通过多态的形式,内部持有目标对象,这样就可以通过代理对象对外暴露相关方法了。这就是JDK动态代理的思想,缺陷是目标对象必须有个父类接口。不计较目标对象,只要给目标对象,创建一个对象继承目标对象,针对目标对象中需要业务代理的方法,进行代理业务,实际功能是调用父类(目标对象)的方。这就是cglib。没有缺点,什么目
2021-04-19 17:42:43 76
原创 业务数据-自动翻译工具-第一版
背景因为涉及业务开发,经常遇到一些id需要翻译成名称,例如:“机构id”翻译为“机构名称”,“用户id”翻译为“用户名称”,以及一些业务id需要翻译为业务名称。经常遇到大量的重复代码填写。常用List<VoucherWarehouse> list(); Paging<VoucherWarehouse> paging(); List<VoucherDelivery> list(); Paging<VoucherDelivery> paging()
2021-03-09 20:31:23 226
原创 业务数据-自动翻译工具-第二版
前言当你做业务内容开发时,数据库数据转化为人类数据,例如:机构id=》机构名称,用户Id=>用户名称。你是否受够了,转化功能,不同业务都需要重写一遍。下面可以看看,我自己写的自动翻译工具。什么是自动翻译工具翻译工具就是用来解决上述痛点,同时实现一次定义多处使用。通过AOP思想对接口进行拦截,自动触发数据转换和数据组装。主要思想自动翻译工具,就是利用Spring AOP思想,对接口进行拦截,针对指定的对象,自动获取数据库数据,再主动调用用户定义的翻译者,获取人类数据,最后在自动填充。代码结构
2021-03-02 01:08:37 784 2
原创 java多线程:5.4 锁-Lock
java lock包由于Synchronized存在不少缺陷,因此jdk1.5之后,提供了Locks包,有ReentrantLock(可重入锁),ReadWriteLock(读写锁,可以获取读锁和写锁)。简单示例public class ReentrantLockkTest { public static void main(String[] args) { final Resourc...
2018-12-26 09:46:25 208
原创 java多线程:5.3 自旋锁
自旋锁自旋锁,也是java中的一种锁,但是这个锁的实现原理,与sychronized不一样的。自旋锁从字面意义理解,就是当前线程一直循环获取锁,不达目的不罢休。自旋锁就是通过代码进行while循环判断,直到获取锁成功,才进行下一步操作。自旋锁分类自旋锁分为两大类:1 有序自旋锁,2 无序自旋锁,即获取锁的顺序是否按照先到先得,有序自旋锁会维护一个链路,记录请求线程的先后顺序。其中有序自旋锁...
2018-12-02 18:20:52 531
原创 java多线程:5.2 synchronized锁
synchronized商品说到锁的种类中,提到synchronized加锁机制。前面通过线程间的通信,我们提到过,当线程wait和notify时,需要获取该对象的监视器,而获取监视器的操作就是synchronized,其实synchronized获取的监视器也可以看做锁,其实线程间的通信也是可以看做,多线程访问统一资源,即:访问一个变量,表明可以执行了。通过synchronized解决Sys...
2018-12-02 16:11:10 106
原创 java多线程:5.1 锁-基础
为什么加锁:当单线程的时候,无论访问什么资源,都不需要考虑锁的问题,但是当多个线程访问同一个资源,就会发生很多千奇百怪的事,为了保证资源访问时的唯一性,需要对访问资源的线程进行限制,这就是锁的由来。锁加在什么地方访问限制加在什么地方?如果加在资源本身的话,对资源来说也是一种冗余,而且使代码更加耦合,因此我们需要把访问限制独立出来,单独使用一个对象进行访问限制,这就是为什么加锁需要有一
2018-12-02 12:40:11 101
原创 java多线程:4 线程间通信
线程间的通信:主要是多个线程间有依赖,需要进行消息的沟通,例如:搬运工搬运10号货物, 需要9号货物先搬走, 10号货物才能搬走,因此这两个线程需要进行通信,告知情况。线程间通信通过Object对象中的wait(当前线程等待)和notify(通知其他线程)方法,我们就可以建立一个多线程之间的通信。public class MyThread { //公共变量,用来标明通信 ...
2018-11-26 10:19:54 155
原创 3. java缓存-线程内缓存guava cache
guava cache的缓存结构常用的guava cache缓存根据上图中的缓存框架,我们常用的一些缓存实例有:LocalManualCache和LocalLoadingCache,两者唯一的区别就是LocalLoadingCache extends LocalManualCache implements LoadingCache&amp;amp;lt;K,V&amp;amp;gt;接口。LocalManualCache...
2018-09-25 16:12:03 2920
原创 4. java缓存-线程外缓存
线程外缓存线程外缓存主要是:缓存数据在同一的服务器中,不在运行服务器中(也可以说不在jvm运行内存中)。通过通信对外提供数据的查询,一般都是通过集群的形式,对外提供数据缓存。常见的有:ehcache、memcache、redis,最常用的有:memcache、redis。进程外缓存的作用解决高并发、频繁的数据访问带来的性能问题,通过内存存储频繁访问的数据,降低数据获取的时间成本。memca...
2018-09-25 16:06:03 412
原创 5. java缓存-ehcache概述
guava cache的缓存结构 常用的guava cache缓存根据上图中的缓存框架,我们常用的一些缓存实例有:LocalManualCache和LocalLoadingCache,两者唯一的区别就是LocalLoadingCache extends LocalManualCache implements LoadingCache范例手动加载缓存手动加载缓存:需要提...
2018-09-18 16:51:18 150
原创 2. java缓存-线程内缓存
进程内缓存进程内缓存的概述就不说了,可以查看[java缓存概述](https://blog.csdn.net/u010652576/article/details/82590189%20java%E7%BC%93%E5%AD%98-%E5%A4%9A%E7%BA%A7%E7%BC%93%E5%AD%98%E6%A6%82%E8%BF%B0)主要说说常见的进程内缓存,这里分为两类:自定义进...
2018-09-10 17:34:01 1186 3
原创 1. java缓存-多级缓存概述
java缓存什么是缓存Cache是高速缓冲存储器一种特殊的存储器子系统,其中复制了频繁使用的数据以利于快速访问。凡是位于速度相差较大的两种硬件/软件之间的,用于协调两者数据传输速度差异的结构,均可称之为Cache8。从开发的角度看,缓存就是用来减少我获取数据时间的东西。为什么要使用缓存列表展示不同存储方式,获取缓存的时间 获取路径 耗时 ...
2018-09-10 15:20:25 2240
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人