摘要:
装饰者模式 概念 动态地给一个对象添加一些额外的职责。与继承的模式对比,装饰者模式更为灵活。 类图 以上共有四个角色: 抽象构件(Component)角色:给出一个抽象接口,以规范准备接收附加责任的对象。 具体构件(ConcreteComponent)角色:定义一个将要接收附加责任的类。 装饰(De 阅读全文
摘要:
@LoadBalanced注解用来给RestTemplate做标记,以使用负载均衡的客户端来配置。 通过搜索LoadBalancerClient可以发现,LoadBalancerClient是SpringCloud定义的一个接口 public interface LoadBalancerClient 阅读全文
摘要:
ClassLoader的主要方法 1.loadClass(String name) 给定一个类名,记载一个类。 2.defineClass(byte[] b, int off, int len) 根据给定的字节数组定义一个类 3.findClass(String name) 查找一个类 4.find 阅读全文
摘要:
Java是按照运行时数据的存储结构来划分内存结构的,java虚拟机规范将java运行时的诗句划分为6种: 1.PC寄存器 用于保存当前执行程序的内存地址,同时java程序是多线程的,不可能一直都按照线性执行下去,当有多个线程交叉执行时,被中断的线程程序当前执行到哪条的内存地址需要记录下来。 2.ja 阅读全文
摘要:
GC中的垃圾,是指的是在内存中不在不再被使用的对象。 常见的垃圾回收算法 1.引用计数算法(无法回收循环引用的对象) 2.标记清除算法分为标记阶段和清除阶段(会产生内存的空间碎片) 3.复制算法(缺点是将系统内存折半,高效性是建立在存活对象少,垃圾对象多的前提下的) 在java新生代串行垃圾回收器中 阅读全文
摘要:
对无序数组的并发搜索的实现可以充分的用到多cpu的优势 一种简单的策略是将原始数组按照期望的线程数进行分割,如果我们计划使用两个线程进行搜索,就可以把一个数组分成两个,每个线程各自独立的搜索,当其中有一个线程找到数据后,立即返回结果的index即可。 首先index需要采用atomicinteger 阅读全文
摘要:
并不是所有的操作都能进行并发计算的,比如有关于数据相关性的操作,如(B+C) * B,操作之间都会有依赖关系的。 可以使用流水线方式充分利用多核环境。 开多个线程。每一条线程相当于车间,负责执行一小部分工作,执行完传递给下一个线程,线程之间可以通过阻塞队列来进行通信。 具体实现: 其中Div, Mu 阅读全文
摘要:
Future模式核心思想是异步调用。我们可以先拿到调用的凭证,让方法先返回,让他在后台慢慢的处理这个请求。通过这个可以实现异步操作。 JDK经准备好了一套完美的实现方式。我们用于执行的异步线程需要继承Callable接口,相当于Runnable,Callable接口中有一个方法call(),相当于r 阅读全文
摘要:
阻塞队列的实现 但是阻塞队列不是一个高性能的体现,完全使用锁和阻塞实现线程之间的同步,在高并发的场合它的性能并不卓越。他仅仅是方便数据的共享。 concurrentLinkedQueue是一个高性能的队列,大量使用无锁的CAS操作,会获得客观的性能提升(不过CAS不是在所有的情况下都比悲观锁的性能好 阅读全文