- 博客(15)
- 资源 (8)
- 收藏
- 关注
原创 Spring IOC容器bean初始化源码分析
上一篇分析对bean定义的解析源码进行了分析,这个过程的最终结果是把xml文件中bean的定义解析成一个个的BeanDefinition对象并且注册到容器中,在Spring IOC容器启动简介篇中分析,在容器启动的最后会对容器中的所有bean进行初始化,利用之前解析出的BeanDefinition对象,创建一个个最终的bean对象,并且完成bean之间的依赖注入,本篇从源码的角度分析在容器启动时所
2015-02-25 20:59:01 4406 2
原创 Spring bean定义解析源码分析
在上一篇Spring IOC容器启动简介中在ClassPathXmlApplicationContext的基础粗略的分析了IOC容器的启动过程,对一些比较复杂的步骤没有详细的说明,从本篇开始对其中的一些比较复杂的步骤进行分析。本篇对基于ClassPathXmlApplicationContext的IOC容器的bean定义的解析与加载过程进行分析。bean定义解析加载的简单时序图如下:b
2015-02-24 21:13:36 2972
原创 Spring IOC容器启动简介
BeanFactory和ApplicationContext都可以用来作为Bean工厂负责创建和管理Bean,相比之下ApplicationContext是BeanFactory的一个增强升级版,比如Application提供了强大的事件机制,自动加载BeanPostProcessor和BeanFactoryPostProcessor,预创建Bean等,一般情况下都使用ApplicationCon
2015-02-18 14:34:56 2836
原创 Disruptor原理浅析
Disruptor是一个高吞吐量的异步处理框架,LMAX号称用它可以1秒钟处理600万订单,从一个简单的例子来分析Disruptor,下面的代码是基于2.10.4版本,不同的版本API有些变化,代码仅供参考。private static void testDisruptor() { RingBuffer ringBuffer = new RingBuffer( new EventFacto
2015-02-16 20:51:37 2520
原创 乱弹java并发(九)-- fork/join
ForkJoin是在java7引入的由Doug Lea设计的一个并行计算框架,ForkJoin框架包含两部分:1、把任务Fork成一系列的相互之间无依赖的递归子任务,不同的子任务可以由不同的CPU核心执行;2、合并(Join)子任务的执行结果。Doug Lea在ForkJoin中引入一个叫work steal的算法,即当某线程的任务队列已执行完时,可以扫描其它线程的任务队列,从其它线程的任务队列队
2015-02-15 00:58:25 666
原创 乱弹java并发(八)-- Phaser
Phaser是java7新添加的一个同步工具,相比CyclicBarrier、CountDownLatch、Semaphore等同步工具,Phaser更灵活而且可复用(CyclicBarrier也可复用),Phaser包含几个动作:register:给Phaser增加parties,并且可以通过deRegister减少总parties(CyclicBarrier、CountDownLatch、
2015-02-14 15:39:51 834
原创 乱弹java并发(七)-- 轻量级锁、偏向锁
java6之前的同步时依赖操作系统互斥来实现的,互斥会导致频繁的线程上下文切换,消耗CPU资源,java6在HotSpot中引入了轻量级锁和偏向锁机制来对同步进行优化,它们的本意是在没有多线程竞争的前提下,减少传统的重量级锁使用操作系统互斥量产生的性能消耗。要了解轻量级锁,以及后面讲到的偏向锁原理和运作过程,必须从虚拟机(HotSpot)的对象头的内存布局开始介绍。HotSpot虚拟机的对象头
2015-02-14 00:29:42 1318
原创 乱弹java并发(六)-- Condition
Condition可以让线程处于条件挂起的状态,它和锁(Lock)配合使用,Lock实例通过newCondition可以生成一个条件对象,Condition.await()让线程处于挂起等待状态,通过在别的线程中调用Condition.signal和Condition.signalAll唤醒处于等待的线程,它们的功能和Object的wait和notify、notifyAll方法功能是一样,wait
2015-02-13 22:14:21 542
原创 乱弹java并发(五)-- AQS
AQS(AbstractQueuedSynchronizer)是JDK中大部分同步工具:可重入锁(ReentrantLock)、可重入读写锁(ReentrantReadWriteLock)、计时闩(CountDownLatch)、信号量(Semaphore)、异步任务(FutureTask)实现的基础。它提供了五个模板方法: protected boolean tryAcquire(in
2015-02-12 22:09:05 661
原创 乱弹java并发(四)-- ThreadPoolExecutor
ThreadPoolExecutor是JDK5加入的一个线程池实现,我们知道线程池一般有两个作用:1、可以重复利用线程,省去反复创建线程的开销,这在高并发系统中不容小觑2、控制线程数量,避免过多的线程耗尽进程的栈空间。整个线程池由两个核心结构组成:线程集合、等待任务队列。ThreadPoolExecutor中有三个关键参数:corePoolSize、maximumPoolSize、ke
2015-02-11 22:07:57 615
原创 乱弹java并发(三)-- CopyOnWriteArrayList和CopyOnWriteArraySet
CopyOnWriteArrayList是基于“写时复制”策略的线程安全的数组,它的特点是写加锁读不加锁,了解过ConcurrentHashMap的原理之后,再理解它的原理就比较简单了,来看看两个关键方法: public boolean add(E e) { final ReentrantLock lock = this.lock; lock.lock(); try {
2015-02-11 21:37:41 1476
原创 在eclipse中玩起btrace
Btrace脚本可以让我们在不停止线上系统的情况来动态的添加一些脚本来对系统进行监控和调测,官方教程都是通过命令行来运行btrace脚本。现在我们来看怎么一步一步在eclipse中玩起Btrace,首先上官网https://kenai.com/projects/btrace/下载一个发布包,我 下的时Win平台的。要在eclipse中玩起btrace,首先在让btrace相关的jar包关联进来
2015-02-10 23:20:14 1809
原创 乱弹java并发(二)-- ConcurrentHashMap
ConcurrentHashMap是JUC中一个高性能的线程安全的hash表,key和value都不可为null,ConcurrentHashMap通过如下手段来来达到它的高性能:1、分离写锁:普通的Hash表通过桶数组+冲突链表来实现,ConcurrentHashMap增加了一个段结构(Segment),通过段数组+桶数组+冲突链表三层结构来实现,在进行put操作的时候先通过hash码定位到
2015-02-09 23:01:31 593
原创 乱弹java并发(一)-- BlockingQueue
最近抽空整理了一下几年前的学习笔记,发现有些东西久了不用就忘记了,感慨年纪大了忘性大呀。现在把这些笔记整理一下分享到博客上,分享的同时加深自己的记忆。java5加入了一个java.util.concurrent包,这个包的大部分代码作者都是Doug Lea大神,JUC对java并发编程有着里程碑式的意义。由于笔记是几年前的,当时的学习时在JDK6的基础上做的,所以如无特殊说明文中涉及到的代
2015-02-08 20:39:28 1040
原创 一个简单的Android SQLite ORM框架
关于SQLite的ORM框架,目前有一些用得比较多的框架比如ORMlite,但是在公司做项目时由于公司的开源政策,对开源框架的检查流程非常繁琐,需要一个专人投入半个月左右(不能忍),而根据我们项目的复杂度估测,自己开发的话半个月肯定就能搞定了(事实上一个礼拜的时候原型就出来了),下面我来简单介绍一下我们的框架。
2015-02-07 22:28:27 1614
Android SQLite ORM框架
2015-02-06
jmx api规范
2012-09-27
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人