Fork me on GitHub

随笔分类 -  java

摘要:本次基于注解+AOP实现分布式锁(招式与前文基于注解切换多数据源相同),话不多说,直接上样例: 首先自定义注解:设计时需要考虑锁的一般属性:keys,最大等待时间,超时时间,时间单位。 新建一个抽象请求拦截器,设计模式:装饰模式,父类决定整体流程,具体细节交给字类实现,便于解耦扩展。 具体实现拦截类 阅读全文
posted @ 2019-03-19 18:54 小传风 阅读(388) 评论(0) 推荐(0)
摘要:多线程访问并修改临界资源(共享变量),变量值往往不会是我们期待的那样。 看下demo: 在我们看来,productId应该最终为1000,如果注释掉同步块,运行的结果不一定为1000。 .... pool-3-thread-1>>>productId:987 time:Mon Mar 18 12:2 阅读全文
posted @ 2019-03-18 14:45 小传风 阅读(386) 评论(0) 推荐(1)
摘要:ThreadLocal ThreadLocal 用一种存储变量与线程绑定的方式,在每个线程中用自己的 ThreadLocalMap 安全隔离变量,为解决多线程程序的并发问题提供了一种新的思路。 简单画一个UML: 再看下ThreadLocal源码get()与set() public T get() 阅读全文
posted @ 2019-03-09 15:35 小传风 阅读(360) 评论(0) 推荐(0)
摘要:多线程编程可是神通:三头六背,实际代码中如果有性能方面的要求,可以考虑下用下: 这里只是举简单例子,实际应用还有许多注意项的。 Java可以用三种方式来创建线程,如下所示: 1)继承Thread类创建线程 2)实现Runnable接口创建线程 3)使用Callable和Future创建线程 下面让我 阅读全文
posted @ 2019-03-02 16:51 小传风 阅读(131) 评论(0) 推荐(0)
摘要:主要利用AOP+ThreadLocal+自定义注释实现注释切换 pom.xml AbstractRoutingDataSource 只支持单库事务,也就是说切换数据源要在开启事务之前执行。 spring DataSourceTransactionManager进行事务管理,开启事务,会将数据源缓存到 阅读全文
posted @ 2019-03-02 16:33 小传风 阅读(1278) 评论(1) 推荐(0)
摘要:有Student类,Person类,还有一个叫Class的类,这是反射的源头。 正常方式:通过完整的类名 > 通过new实例化 > 取得实例化对象 反射方式:实例化对象 > getClass()方法 > 通过完整的类名 需要使用反射就要获得Class这个类,有三种方法: package cn.cla 阅读全文
posted @ 2019-03-02 15:53 小传风 阅读(225) 评论(1) 推荐(0)
摘要:MethodInterceptor MethodInterceptor是AOP项目中的拦截器(注:不是动态代理拦截器),区别与HandlerInterceptor拦截目标时请求,它拦截的目标是方法。 实现MethodInterceptor拦截器大致也分为两种: (1)MethodIntercepto 阅读全文
posted @ 2019-03-02 15:27 小传风 阅读(17752) 评论(1) 推荐(0)
摘要:过滤器跟拦截器的区别 spring mvc的拦截器是只拦截controller而不拦截jsp,html 页面文件的。这就用到过滤器filter了,filter是在servlet前执行的,你也可以理解成过滤器中包含拦截器,一个请求过来 ,先进行过滤器处理,看程序是否受理该请求 。 过滤器放过后 , 程 阅读全文
posted @ 2019-02-24 16:27 小传风 阅读(21213) 评论(1) 推荐(1)
摘要:一:asList 数组转ArrayList陷阱: asList() 源码: public static <T> List<T> asList(T... a) { return new ArrayList<T>(a); } private final E[] a; ArrayList(E[] arra 阅读全文
posted @ 2018-09-03 22:46 小传风 阅读(259) 评论(0) 推荐(0)