Honson Blog

一生想做浪漫极客

Java多线程-Callable和Future

java Callable和Future使用

Callable和Future出现的原因 创建线程的2种方式,一种是直接继承Thread,另外一种就是实现Runnable接口。 这2种方式都有一个缺陷就是:在执行完任务之后无法获取执行结果。 如果需要获取执行结果,就必须通过共享变量或者使用线程通信的方式来达到效果,这样使用起来就比较麻烦。 自从Java 1.5开始,就提供了Callable和Future,通过它们可以在任务执行完毕之后得到...

java8流编程

jdk8新增的流编程

java8流编程 概念 Stream 不是 集合元素,也不是数据结构,它相当于一个 高级版本的 Iterator,不可以重复遍历里面的数据,像水一样,流过了就一去不复返。它和普通的 Iterator 不同的是,它可以并行遍历,普通的 Iterator 只能是串行,在一个线程中执行。 内部迭代和外部迭代 使用for等进行迭代我们叫做外部迭代,使用stream流迭代叫做内部迭代,内部迭代有什么...

java8流的操作机制

java8

#### java8流的操作机制 ##### 特点 所有操作是链式调用, 一个元素只迭代一次 每一个中间操作返回一个新的流. 流里面有一个属性sourceStage, 指向同一个 地方,就是Head Head->nextStage->nextStage->… -> null 有状态操作会把无状态操作阶段,单独处理 并行环境下, 有状态...

MyBatis缓存

MyBatis缓存

MyBatis缓存介绍   正如大多数持久层框架一样,MyBatis 同样提供了一级缓存和二级缓存的支持    一级缓存: 基于PerpetualCache 的 HashMap本地缓存,其存储作用域为 Session,当 Session flush 或 close 之后,该Session中的所有 Cache 就将清空。 二级缓存与一级缓存其机制相同,默认也是采用 Perpetual...

MyBatis延迟加载

MyBatis延迟加载

mybatis 延迟加载 什么是延迟加载 延迟加载又叫懒加载,也叫按需加载,也就是说先加载主信息,需要的时候,再去加载从信息。代码中有查询语句,当执行到查询语句时,并不是马上去DB中查询,而是根据设置的延迟策略将查询向后推迟。 什么时候会执行延迟加载 配置之后在对关联对象进行查询时使用延迟加载。 延迟加载策略 直接加载 遇到代码中查询语句,马上到DB中执行select语句进行查询。(这种只能...

java虚拟机

java虚拟机

Java 虚拟机将字节流转化为 Java 类的过程。这个过程可分为加载、链接以及初始化 三大步骤。 加载是指查找字节流,并且据此创建类的过程。加载需要借助类加载器,在 Java 虚拟机中,类加载 器使用了双亲委派模型,即接收到加载请求时,会先将请求转发给父类加载器。 链接,是指将创建成的类合并至 Java 虚拟机中,使之能够执行的过程。链接还分验证、准备和解析 三个阶段。其中,解析...

java虚拟机的结构

java

java虚拟机的结构 类加载子系统 负责从文件系统或网络中加载class信息,加载的信息存放的一块称为方法区的内存空间。除了类信息,方法区还存放运行时常量池信息。(这部分的信息是Class文件中的常量池部分的内存映射) java堆 java堆在虚拟机启动的时候建立,他是主要的内存工作区域,几乎所有的java...

简单工厂

设计模式之工厂模式

简单工厂 定义 用一个工厂对象决定创建哪一种产品的实例。 类型 创建型,但不属于GOF23中设计模式。 使用场景 工厂类负责创建的对象比较少,客户端(应用层)只知道传入工厂类的参数,对于如何创建对象(逻辑)不关心 优点 只需要传入一个正确的参数,就可以获取你所需要的对象二无需知道其创建细节。 简单工厂类的缺点 工厂类的职责相对过重,增加新的产品,需要修改...

开闭原则

软件开发原则之开闭原则

开闭原则 定义 所谓开闭原则就是一个软件实体如类、模块和函数应该对扩展开放、对修改关闭。 强调用抽象构建框架,实现实现拓展细节。 有优点是提高软件的复用性和易维护展性。是面向对象的最基本原则。 依赖倒置原则 定义 高层模块不应该依赖底层模块,二者都应该依赖其抽象。 抽象不应该依赖细节:细节应该依赖抽象。 针对接口编程,不要针对实现编程。 优点 降低耦合提高稳定性,提高代码的可读性和易...

单例模式

设计模式之单例模式

设计模式之单例模式 定义 保证一个类仅有一个实例,并提供一个全局访问点。 类型 创建型 适用场景 想确保任何情况下都绝对只有一个实例。 优点 在内存中只有一个实例,减少内存开销。特别是一个对象在使用时需要频繁创建和销毁同时创建和销毁性能无法优化时。 可以避免对资源的多重占用。比如我在对一个文件进行写操作,使用单例可以避免同时对这个文件进行写操作。 ...