自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 ConcurrentHashMap的jdk1.7源码

ConcurrentHashMap的锁分段技术:假如容器里有多把锁,每一把锁用于锁容器其中一部分数据,那么当多线程访问容器里不同数据段的数据时,线程间就不会存在锁竞争,从而可以有效的提高并发访问效率,这就是ConcurrentHashMap所使用的锁分段技术。首先将数据分成一段一段的存储,然后给每一段数据配一把锁,当一个线程占用锁访问其中一个段数据的时候,其他段的数据也能被其他线程访问。 1.类变

2016-08-13 19:20:50 2873

原创 AOP概述

AOP又称为面向切面编程。Aspect-Oriented Programming。其中Aspect是一中模块化机制,用来描述分散在对象、类或函数中的横切关注点。从关注点中分离出横切关注点是面向切面编程的程序设计核心概念。AOP的主要概念有:1.基础:被增强的对象,或目标对象。2.切面:包含对于基础的增强应用3.配置:将切面和基础结合在一起,从而完成切面对基础的编织。Spring的AOP主要使用Jav

2016-07-28 10:45:42 423

原创 AOP设计与实现

JVM动态代理通过jdk的动态代理,可以为任意Java对象创建代理对象。通过反射API,可以实现该特性。 - 代理模式一个RealSubject表示目标对象,同时会设计一个和目标对象一致的代理对象Proxy,均实现了接口Subject的request方法,在这种情况下,对目标对象的request方法调用,就被代理对象所拦截,从而为目标对象的方法操作做了铺垫,称为代理模式。在Proxy的调用过程中

2016-07-28 10:37:21 477

原创 AtomicInteger源码

Atomic原子类,可以对相应的操作执行原子操作。主要分为以下几种: 1. 基本类型: AtomicInteger, AtomicLong, AtomicBoolean ; 2. 数组类型: AtomicIntegerArray, AtomicLongArray, AtomicReferenceArray ; 3. 引用类型: AtomicReference, AtomicStampedRer

2016-06-11 13:45:44 523

原创 ThreadPoolExecutor源码

java.util.concurrent.ThreadPoolExecutor extends AbstractExecutorServiceThreadPoolExecutor类称为线程池。AbstractExecutorService是一个抽象类,它实现了ExecutorService接口 1.类变量&常量//ctl是一个AtomicInteger类型的原子对象。ctl记录了"线程池中的任务数

2016-06-11 13:45:11 367

原创 ExecutorService&Executor接口源码

interface java.util.concurrent.Executor接口Executor接口只有一个方法void execute(Runnable command); 传入参数为一个实现了Runnable接口的类interface java.util.concurrent.ExecutorService extends ExecutorExecutorService接口继承自Executo

2016-06-11 13:44:52 549

原创 Semaphore源码

java.util.concurrent.Semaphore implements java.io.SerializableSemaphore类称为信号量,本质上是一个共享锁。维持一定数量的许可,当线程通过acquire请求许可时,若已超过指定数量,则必须等待。1.类变量&常量 private final Sync sync; //提供所有实现机制的同步器2.构造方法 //输入参数表示

2016-06-11 13:44:09 467

原创 CountDownLatch源码

java.util.concurrent.CountDownLatchCountDownLatch类可以实现,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。 CountDownLatch是通过“共享锁”实现的。在创建CountDownLatch中时,会传递一个int类型参数count,该参数是“锁计数器”的初始状态,表示该“共享锁”最多能被count给线程同时获取。当某线程

2016-06-10 20:42:21 353

原创 CyclicBarrier源码

java.util.concurrent.CyclicBarrierCyclicBarrier是一个同步辅助类,允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)。因为该 barrier 在释放等待线程后可以重用,所以称它为循环 的 barrier。CountDownLatch和CyclicBarrier的区别 (01) CountDownLatch的作用

2016-06-10 20:41:56 651

原创 ReentrantLock源码

java.util.concurrent.locks.ReentrantLock implements Lock, java.io.SerializableReentrantLock称为可重入锁,其内部可以分成两种锁,公平锁和非公平锁,均通过继承自一个父类Sync实现,该父类有继承自AQS类1.类变量&常量 private final Sync sync; //提供所有实现机制的同步器

2016-06-10 19:15:30 347

原创 AbstractQueueSynchronizer源码

abstarct class java.util.concurrent.locks.AbstarctQueueSynchronizer extends AbstractOwnableSynchronizer implements java.io.SerializableAbstractQueueSynchronizer,简称AQS,是所有的锁类,如ReentrantLock、Reentran

2016-06-10 12:29:03 863

原创 ConcurrentHashMap源码

java.util.concurrent.ConcurrentHashMapConcurrentHashMap<K,V> extends AbstractMap<K,V> implements ConcurrentMap<K,V>, Serializable {设计首要目的:维护并发可读性(get、迭代相关);次要目的:使空间消耗比HashMap相同或更好,且支持多线程高效率的初始插入(

2016-06-08 17:31:15 1814

原创 String 源码

java.lang.Stringfinal class String implements java.io.Serializable, Comparable<String>, CharSequence1.类变量&常量 private final char value[]; //用于存储值的char型数组 private int hash; // 默认为0 //

2016-06-08 11:49:23 419

原创 LinkedHashMap源码

java.util.LinkedHashMap extends HashMap<K,V> implements Map<K,V>LinkedHashMap可以保存元素存进map中的顺序或访问元素的顺序,LinkedHashMap维护着一个运行于所有条目的双重链接列表。此链接列表定义了迭代顺序1.类变量&常量 transient LinkedHashMap.Entry<K,V> head;

2016-06-08 11:48:39 487

原创 ArrayList源码

ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable类变量&常量 static final int DEFAULT_CAPACITY=10 默认的初始容量 static final Object[] EMPTY_E

2016-06-06 18:59:24 306

原创 LinkedList源码

LinkedList<E> extends AbstractSequentialList<E> implements List<E>, Deque<E>, Cloneable, java.io.Serializable1.类变量&常量 transient int size = 0; //list的大小 transient Node<E> first; //list的首部

2016-06-06 18:59:09 250

原创 HashSet源码

HashSet<E> extends AbstractSet<E> implements Set<E>, Cloneable, java.io.SerializableHashSet依赖于HashMap实现 1.类变量&常量transient HashMap<E,Object> map; //HashSet主要实现的数据结构static final Object PRESENT

2016-06-06 18:58:55 434

原创 HashMap源码

HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable 基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。(除了非同步和允许使用 null 之外,HashMap 类与Hashtable 大致相同)此类不保证映射的顺序,特别是它不

2016-06-06 18:58:34 684

原创 Spring、Spring MVC、Hibernate相关内容

Spring1. Spring相关框架Spring分为七层,分别为Core层、AOP层、Context层、DAO层、ORM层、WEB层、WEB MVC层.2. IoC依赖注入控制反转是从调用者角度,即调用者无需主动获取依赖对象,而是通过被动接受Spring容器为调用者的成员变量赋值,通过set方法。因此,调用者获取依赖对象的方式由原来的主动获取变成被动接受,因此称为控制反转。 从Sp

2016-05-21 20:16:48 527

原创 Java虚拟机相关知识(2)—对象的创建

对象的创建当要new一个对象时,主要执行的步骤有以下几条;定位new后面的参数在常量池定位中是否能够找到该类的符号引用。若找不到,就进行相应的类加载过程。对要new的对象在堆中分配一定的空间。在类加载过程中,对象的大小已经确定。指针碰撞:假设堆中空间是连续的,未分配和已分配的中间用一个指针分隔表示。则将指针向未分配部分移动,则可为其划分空间空闲列表:堆中空间不是连续

2016-04-01 19:15:14 257

原创 Java虚拟机相关知识(1)—Java内存区域

Java内存区域模型Java内存模型主要包括两部分,一部分是线程隔离的,也就是说每个线程独自拥有的内存区域,另一部分是线程共享的,每个线程都能对其进行访问。线程隔离的部分又分为三个模块,分别是程序计数器、虚拟机栈和本地方法区。线程共享部分分为两个模块,堆和方法区。程序计数器程序计数器中主要记录当前线程所执行的字节码的行号地址。若为

2016-04-01 17:11:14 300

空空如也

空空如也

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

TA关注的人

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