自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(34)
  • 收藏
  • 关注

原创 Spring MVC源码解析

DispatcherServlet配置到web.xml。在servlet.init()的时候进行spring mvc的初始化1、创建springmvc的ioc容器并refresh(),从ServletContext中拿到Spring ioc容器并设置父子ApplicationContext关系2、初始化Servlet需要用的策略工具比如:初始化文件上传工具、国际化工具、Handler...

2014-02-16 23:25:06 160

Spring Aop

三种方式:ProxyFactoryBean,BeanNameAutoProxyCreator,基于标签或注解形式1、ProxyFactoryBean只能代理一个类targetBean  interceptorNames     proxyInterfaces它是一个FactoryBean,通过getObject来获取目标对象生成代理对象所用的工具是AopProxy.getProx...

2014-02-16 21:57:06 123

原创 Spring factory.getBean(name)过程

Eagerly check singleton cache for manually registered singletonscheck if bean definition exists in this factoryNot fond ->check parent factoryGuarantee initialization of beans that the cu...

2014-02-16 01:11:09 326

Spring Scope

scopesingletonprototyperequest(每次请求创建一次bean)、session(每个会话创建一次bean)、globalSession、application(放到ServletContext里面,跟放到spring容器里面差不多)SimpleThreadScope     bean只存放进单个线程自己定制可以用CustomScopeCon...

2014-02-16 00:16:37 87

原创 Spring结构大概

入口:在web.xml里面配置ServletContextListener,在Servlet容器初始化完以后会执行ServletContextListener的contextInitialized(ServletContextEvent)。创建XmlWebApplicationContext。(根据ContextLoader.properties里的配置创建)对创建出来的上下文...

2014-02-16 00:02:28 112

原创 线程池(ThreadPoolExecutor)

两个好处:1、线程可以重复利用,不用对同步任务进行不断的创建销毁2、可以限制和管理资源,如线程 两个结果组成:Set workers 表示每个正在跑的线程,在run中,先是处理第一个Task,处理完后会从workQueue中尝试拿到一个Task进行处理,如果没有,结束(keepAliveTime可以调节结束的延时)、删除这个workerBlockingQueue<...

2014-02-12 15:40:48 105

MySimpleReadWriteLock

import java.util.concurrent.TimeUnit;import java.util.concurrent.locks.AbstractQueuedSynchronizer;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;publi...

2014-02-07 14:36:18 80

原创 MySimpleLock

import java.util.concurrent.locks.AbstractQueuedSynchronizer;public class MySimpleLock { private Syn syn = new Syn(); private static class Syn extends AbstractQueuedSynchronizer { ...

2014-01-24 14:08:02 82

原创 重入读写锁(ReentrantReadWriteLock)源码

tryAcquireSharedexclusiveCount(state)!=0&&getExclusiveOwnerThread!=current//如果现在是写锁状态,并且当前线程不是拥有锁的线程也就是如果是当前线程是拥有写锁的,读操作也可以进去if(!readShouldBlock(current)&&CAS(state, state+SHARED_UNIT)){ c...

2014-01-23 13:35:37 102

原创 How to build a exclusive Lock

阻塞lock的基本流程if(cas(0,acquire))setExclusiveOwnerThreadelse if(current==getExclusiveOnwerThread) {     setState(c+acquires)}addWaiterpark........................for(;;) {p = node....

2014-01-21 09:47:30 153

原创 信号(Semaphore)源码

成员:sync方法:acquire acquire(int) acquireUnInterruptibly acquireUnInterruptily(int) tryAcquire tryAcquire(int) tryAcquire(long, TimeUnit)  tryAcquire(int, long, TimeUnit)release  release(int) avai...

2014-01-20 16:33:08 121

原创 栅栏(CyclicBarrier)源码

成员:lock,trip(是lock的condition),parties,barrierCommand,generation,count1、generation是为了标示这一次的栅栏是否被破坏。2、parties就是构造函数时传入的参数,表示在trip之前需要执行的线程数。count被parties初始化,是一个变量,dowait时会减一,直至等于0的时候,触发nextGener...

2014-01-20 16:32:38 219

原创 闭锁(CountDownLatch)源码

成员sync所含方法: await(),await(long, TimeUnit),countDown,getCount内部静态类Sync extends AbstractQueuedSynchronizer1、两个公开方法,await和countDown,不存在获取资源的操作,在初始化的时候已经设置state。tryAcquireShared只是做检查操作,如果等于0,就返回...

2014-01-20 16:25:49 92

AQS源码阅读理解(uncompleted)

有head和tail当acquire*操作的时候,如果我们定义的资源限制操作返回false时,会在tail端加入一个新的节点(Node里面的所有基础属性都是volatile,用CAS设置tail指针)。然后利用LockSupport.part(this)阻塞。当release的时候,如果我们定义的资源操作返回true,会将head节点的下一个SIGNAL节点的thread唤醒。...

2014-01-20 16:19:59 103

原创 ConcurrentLinkedQueue

成员:head tail内部类:Node  item和next,Itr implements Iteratoradd  offer   利用UNSAFE.compareAndSwapObject(p, nextOffSet, null, newNode)(p表示遍历整个链表一直到next为null为止的Node)如果设置成功,调用UNSAFE.compareAndSwapObj...

2014-01-08 09:41:16 83

ConcurrentHashMap

ConcurrentHashMap  主要两个结构:Segment[]  和 HashEntry[]每个Segment是一个ReentrantLockSegment结构跟HashMap差不多,成员:table,count,loadFactor,threshold,modCount每个Segment继承ReentrantLock,实现Serializable定义了一般的ma...

2014-01-08 09:39:41 73

原创 PriorityQueue数据结构

PriorityQueue数据结构

2014-01-08 09:36:56 73

原创 TreeMap源码

TreeMap源码

2014-01-08 09:36:19 71

原创 TreeMap数据结构篇

红黑树

2014-01-08 09:35:41 217

原创 ArrayList

transient  为何不直接实例化这个数组,原因是不希望将数组中空余的也实例化,所以要加writeObject(ObjectOutputStream) readObject(ObjectInputStream)ensureCapacity(size+1) //检查如果size+1大于oldCapacity,newCapacity=(oldCapacity*3)/2+1fastRem...

2013-12-19 10:20:20 84

原创 HashMap源码

Map接口定义了一个内部类EntryHashMap一个bucket用Entry(extends Map.Entry)链表示HashMap可以存放null key和null valuetransfer 将当前tables上的所有的节点转移到newTable上去hash(int hashCode) 是为了防止质量差的hash函数带来过多的冲突(碰撞)。modCount  结...

2013-12-19 10:15:47 70

jetty源码分析

加载WebXmlConfiguration对象,找到webdefault.xml(在jetty-webapp-9.1.jar包中)和web.xml文件,创建WebAppClassLoader,利用StandardDescriptorProcessor解析WebXmlConfiguration,将配置信息设置到Context。执行子handler的start,会分别启动SessionHandler...

2013-12-19 10:07:08 256

原创 tomcat 源码分析

前言:tomcat启动(BootStrap),会由Server(LifeCycle)的start调用传递到StandardContext(LifeCycle)容器的start调用。1、init初始化方法:加入ContextConfig listener,然后lifeCycleSupport.fireLifecycleEvent(INIT_EVENT),会触发ContextConfig的ini...

2013-12-19 10:05:23 82

原创 Spring结构大概

三大组件:Bean,Context,Core通过这三大组件能构建出像AOP,Web,Transaction,Orm特性功能Bean组件的主要部分是BeanFactory、BeanDefinition、BeanDefinitionReader1、BeanFactory分为ListableBeanFactory表示可以返回一些Bean集合,HierarchicalBeanFactory...

2013-12-19 10:03:39 70

原创 内存分配策略

大对象直接进入老年代大对象就是指需要大量连续空间的java对象,写程序时应该避免“短命的大对象”可根据-XX:PretenureSizeThreshold来设置多大的对象直接进入老年代,但这东西只对Serial和ParNew收集器有效长期存活的对象进入老年代虚拟机为每个对象定义一个年龄计数器在第一次Minor GC后仍然存活, 将对象移入Survivor空间年龄设为1。...

2012-09-14 16:20:25 94

原创 freemarker 讲义

1. 类型支持的类型 数据模型实现 模型接口 操作 注意标量 字符串 SimpleScalar TemplateScalarModel "Hello ${user}!",name[0] ,r"${"test"}" Actually,the name of this interface should be TemplateStringModel数字 SimpleNumber...

2012-09-13 00:07:51 78

原创 垃圾回收(GC)

Garbage Collection垃圾收集需要完成的三件事1、哪些内存需要回收2、什么时候回收3、如何回收java内存运行时区域的部分中,程序计数器,虚拟机栈,本地方法栈三个区域随线程而生而灭,栈中的栈侦随方法的进出而有条不紊的执行出栈入栈操作。每个栈中分配多少内存基本上在类结构确定下来时就已知的,因此,这些部分是内存分配和回收都具确定性。java堆和方法区不一样...

2012-09-13 00:04:43 62

原创 SimpleDateFormat

这玩意儿不是线程安全的,看起来就是个包装器工具(SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");String strDate = sdf.format(date);),但其实是把date的time值给注进去了,就是有状态了...

2012-09-13 00:02:58 51

原创 公平锁的性能比非公平锁的性能低

为什么说公平锁的性能比非公平锁的性能低 在没有深入了解内部机制及实现之前,先了解下为什么会存在公平锁和非公平锁。公平锁保证一个阻塞的线程最终能够获得锁,因为是有序的,所以总是可以按照请求的顺序获得锁。不公平锁意味着后请求锁的线程可能在其前面排列的休眠线程恢复前拿到锁,这样就有可能提高并发的性能。这是因为通常情况下挂起的线程重新开始与它真正开始运行,二者之间会产生严重的延时。因此非公平...

2012-09-13 00:01:45 1045 1

原创 CAS ABA问题

首先要知道什么叫CAS(compare and swap):在jdk里面可以由UnSafe提供一个针对于volatile变量的操作,其原理是直接调用的CPU的CAS动作 举个例子: 我们经常会有这样的操作 if(a==b) a = b+1; 在多线程的环境下,如果在执行完a==b之后,a发生了改变,我们就达不到预期的结果了 所以,就有了cas操作 具体你可以看看JD...

2012-09-13 00:00:33 56

原创 JMM

内存模型描述的是程序中各变量(实例域、静态域和数组元素)之间的关系,以及在实际计算机系统中将变量存储到内存和从内存取出变量这样的低层细节。在C或C++中, 可以利用不同操作平台下的内存模型来编写并发程序. 但是, 这带给开发人员的是, 更高的学习成本.相比之下, Java利用了自身虚拟机的优势, 使内存模型不束缚于具体的处理器架构, 通过Java内存模型真正实现了跨平台.(针对hotspo...

2012-09-12 23:59:59 58

原创 线程安全与锁优化

Brian Goetz对线程安全的定义:当多个线程访问一个对象时,如果不考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调度方进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那这个对象就是线程安全的并发处理的广泛应用是使得Amdahl定律替代摩尔定律成为计算机性能发展源动力,是人类压榨计算机运算能力最有力的武器线程安全 限定为多个线程之间存...

2012-09-12 23:59:25 54

原创 OpenJDK FAQ

What happens with JRockit? Will it become part of OpenJDK?Oracle engineers are currently working to merge the Oracle Java HotSpot Java Virtual Machine (JVM) and the Oracle JRockit JVM into a converged...

2012-09-12 23:58:04 100

原创 编译JDK

编译hotspot的时候可能会出现的错误:"*** This OS is not supported:" `uname -a`; exit 1;这是由于内核版本太高了,hotspot默认支持的linux版本只到2.6,而ubuntu12的kernel是3.2,需要简单hack一下hotspot/make/linux/Makefile两种方式解决:方法一:uname -r#查...

2012-09-12 23:57:01 59

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除