摘要: 在Java多线程编程中,经常会需要我们控制并发流程,等其他线程执行完毕,或者分阶段执行。Java在1.5的juc中引入了 和`CyclicBarrier Phaser`。 CountDownLatch A synchronization aid that allows one or more thr 阅读全文
posted @ 2017-09-23 20:04 aheizi 阅读(3620) 评论(0) 推荐(0) 编辑
摘要: ThreadLocal简介 ThreadLocal是Java中的线程局部变量,用于存放线程的局部变量。 ThreadLocal为每个线程的中并发访问的数据提供一个副本,通过访问副本来运行业务,这样的结果是耗费了内存,但是确避免线程同步所带来性能消耗,也减少了线程并发控制的复杂度。 首先看一下Thre 阅读全文
posted @ 2017-07-06 11:53 aheizi 阅读(694) 评论(0) 推荐(0) 编辑
摘要: jps jps位于jdk的bin目录下,其作用是显示当前系统的java进程情况,及其id号。 jps相当于Solaris进程工具ps。不象”pgrep java”或”ps ef grep java”,jps并不使用应用程序名来查找JVM实例。因此,它查找所有的Java应用程序,包括即使没有使用jav 阅读全文
posted @ 2017-07-06 10:15 aheizi 阅读(738) 评论(0) 推荐(0) 编辑
摘要: 哪些内存需要回收 在Java堆中存放着几乎所有的对象实例,垃圾收集器在对堆进行回收前,第一件事情就是要知道哪些对象还“存活着”,哪些对象已经”死去“。 引用计数算法 引用计数法的实现:给对象中添加一个引用计数器,每当有一个地方引用它时,计数器就加1,当引用失效时,计数器就减1,只要计数器为0的对象就 阅读全文
posted @ 2017-07-05 14:19 aheizi 阅读(509) 评论(0) 推荐(0) 编辑
摘要: Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域都有各自的用途,有的区域是线程共享的,有的区域是线程隔离的。如下图: 程序计数器 程序计数器(Program Counter Register)是一块较小的内存空间,它可以看做是当前线程所执行的字节码的行号 阅读全文
posted @ 2017-07-02 12:37 aheizi 阅读(592) 评论(0) 推荐(0) 编辑
摘要: 当一个项目中有多个数据源(也可以是主从库)的时候,我们可以利用注解在mapper接口上标注数据源,从而来实现多个数据源在运行时的动态切换。 实现原理 在Spring 2.0.1中引入了AbstractRoutingDataSource, 该类充当了DataSource的路由中介, 能有在运行时, 根 阅读全文
posted @ 2017-06-29 21:02 aheizi 阅读(12166) 评论(5) 推荐(4) 编辑
摘要: 实现工具类 利用注解实现简单的excel数据读取,利用注解对类的属性和excel中的表头映射,使用Apache的poi就不用在业务代码中涉及row,rows这些属性了。 定义注解: 由于本例中只涉及根据Excel表头部分对Excel进行解析,只定义了一个name作为和Excel表头的隐射。 工具类完 阅读全文
posted @ 2017-06-29 13:58 aheizi 阅读(6475) 评论(0) 推荐(1) 编辑
摘要: 1. 什么是注解 注解是java5引入的特性,在代码中插入一种注释化的信息,用于对代码进行说明,可以对包、类、接口、字段、方法参数、局部变量等进行注解。注解也叫元数据(meta data)。这些注解信息可以在编译期使用预编译工具进行处理(pre compiler tools),也可以在运行期使用 J 阅读全文
posted @ 2017-06-23 17:31 aheizi 阅读(1288) 评论(0) 推荐(0) 编辑
摘要: 简单用法 下面以一个简单的例子来看看Disruptor的用法:生产者发送一个long型的消息,消费者接收消息并打印出来。 首先,我们定义一个Event: 为了使Disruptor对这些Event提前分配,我们需要创建一个EventFactory: 事件已经定义好了,我们需要创建一个消费者来处理这些消 阅读全文
posted @ 2017-06-20 11:08 aheizi 阅读(2375) 评论(1) 推荐(1) 编辑
摘要: 1. Disruptor简单介绍 Disruptor是一个由LMAX开源的Java并发框架。LMAX是一种新型零售金融交易平台,这个系统是建立在 JVM 平台上,核心是一个业务逻辑处理器,它能够在一个线程里每秒处理 6 百万订单。业务逻辑处理器完全是运行在内存中(in memory),使用事件源驱动 阅读全文
posted @ 2017-06-19 10:32 aheizi 阅读(3065) 评论(0) 推荐(0) 编辑