0. 说明
由于最近被一个同学问到Java的反射,我给它讲了反射,可是发现,我只是讲了什么是反射,别人却说,反射的实现原理是啥,这才发现我答非所问。后来去网上查了资料,大部分都只是讲到反射的使用,关于原理的这部分,却很少涉及,这是又拿起了《深入理解Java虚拟机》,尝试从中找答案。
/- 记录技术成长点滴 -/
代理模式是常用的结构性设计模式之一,它为对象的间接访问提供了一个解决方案,可以对对象的访问进行控制。可以在目标对象的基础上,增加额外的功能操作,即扩展目标对象的功能。
体现编程思想:不修改原模块代码或方法,通过代理的方式来扩展
完整代码见文末链接
场景描述:假设现在我们总共有1000张票要进行出售,共有10个出售点,那么当售票到最后只有一张票时每个售票点如何去处理这唯一的一张票?或者对于某一张票而言,假设它正在售票站1售票的程序执行过程中,但是还没有出售,那么此时,其他售票站改如何去处理这张票呢?
本文摘自《Java并发编程的艺术-方腾飞》
本节将介绍什么是阻塞队列,以及Java中阻塞队列的4种四种处理方式,并介绍Java7(Java8相同)中提供的7种阻塞队列,稍后分析阻塞队列的一种实现方式
Spring AOP构建在动态代理基础之上,因此,Spring对AOP的支持局限于方法拦截(AspectJ静态代理框架能够实现更为高级的功能,本文不做介绍)
Spring AOP使用的动态代理,所谓的动态代理就是说AOP框架不会去修改字节码,而是在内存中临时为方法生成一个AOP对象,这个AOP对象包含了目标对象的全部方法,并且在特定的切点做了增强处理,并回调原对象的方法
Spring AOP中的动态代理主要有两种方式 :
InvocationHandler
接口和Proxy
类Java中的
ThreadLocal
类允许我们创建只能被同一个线程读写的变量。因此,如果一段代码含有一个ThreadLocal
变量的引用,即使两个线程同时执行这段代码,它们也无法访问到对方的ThreadLocal
变量
ThreadLocal
并不是解决多线程共享变量的问题,既然变量不共享,更谈不上同步到问题ThreadLocal
提供了线程本地变量的实例。它与普通变量的区别在于,每个使用该变量的线程都会初始化一个完全独立的实例副本。ThreadLocal
变量通常被private static
修饰。当一个线程结束时,它所使用的所有 ThreadLocal
相对的实例副本都可被回收