- 博客(19)
- 收藏
- 关注
转载 Tomcat与Spring中的事件机制详解
引言最近在看tomcat源码,源码中出现了大量事件消息,可以说整个tomcat的启动流程都可以通过事件派发机制串起来,研究透了tomcat的各种事件消息,基本上对tomcat的启动流程也就有了一个整体的认识。在这一基础上,联想到之前在看spring源码过程中也存在不少事件相关知识,于是想对这两个框架中的事件派发机制做一个简单的总结,加深理解。事件机制原理其实比较简单,抽象来看的话,设...
2018-12-17 23:06:00
152
转载 Spring Framework框架解析(1)- 从图书馆示例来看xml文件的加载过程
引言这个系列是我阅读Spring源码后的一个总结,会从Spring Framework框架的整体结构进行分析,不会先入为主的讲解IOC或者AOP的原理,如果读者有使用Spring的经验再好不过。鉴于每个人对源码阅读角度的不同,如果文中存在理解有误的地方希望读者能够及时提出,共同进步。文章所分析的源码基于5.0.8版本,但使用老版本理解起来问题也不大,因为在框架整体架构上变化并不多。如...
2018-11-15 07:17:00
130
转载 Java并发(11)- 有关线程池的10个问题
引言在日常开发中,线程池是使用非常频繁的一种技术,无论是服务端多线程接收用户请求,还是客户端多线程处理数据,都会用到线程池技术,那么全面的了解线程池的使用、背后的实现原理以及合理的优化线程池的大小等都是非常有必要的。这篇文章会通过对一系列的问题的解答来讲解线程池的基本功能以及背后的原理,希望能对大家有所帮助。举个例子来说明为什么要使用线程池,有什么好处?jdk1.8中提供了哪几种...
2018-11-09 07:30:00
372
转载 Java并发(10)- 简单聊聊JDK中的七大阻塞队列
引言JDK中除了上文提到的各种并发容器,还提供了丰富的阻塞队列。阻塞队列统一实现了BlockingQueue接口,BlockingQueue接口在java.util包Queue接口的基础上提供了put(e)以及take()两个阻塞方法。他的主要使用场景就是多线程下的生产者消费者模式,生产者线程通过put(e)方法将生产元素,消费者线程通过take()消费元素。除了阻塞功能,Blocki...
2018-10-25 23:50:00
169
转载 Java并发(9)- 从同步容器到并发容器
引言容器是Java基础类库中使用频率最高的一部分,Java集合包中提供了大量的容器类来帮组我们简化开发,我前面的文章中对Java集合包中的关键容器进行过一个系列的分析,但这些集合类都是非线程安全的,即在多线程的环境下,都需要其他额外的手段来保证数据的正确性,最简单的就是通过synchronized关键字将所有使用到非线程安全的容器代码全部同步执行。这种方式虽然可以达到线程安全的目的,但...
2018-10-17 07:34:00
82
转载 Java并发(8)- 读写锁中的性能之王:StampedLock
在上一篇《你真的懂ReentrantReadWriteLock吗?》中我给大家留了一个引子,一个更高效同时可以避免写饥饿的读写锁---StampedLock。StampedLock实现了不仅多个读不互相阻塞,同时在读操作时不会阻塞写操作。为什么StampedLock这么神奇?能够达到这种效果,它的核心思想在于,在读的时候如果发生了写,应该通过重试的方式来获取新的值,而不应该阻塞写操作。...
2018-09-25 07:29:00
263
转载 Java并发(7)- 你真的了解ReentrantReadWriteLock吗?
引言在前几篇文章中了解了ReentrantLock、Semaphore与CountDownLatch后,J.U.C包中基于AQS实现的并发工具类还剩一个比较重要的:读写锁ReentrantReadWriteLock。读写锁在Java面试过程中是一个经常性考的题目,他涉及到的知识点比较多,导致很多人不能透彻的理解他。举几个面试中常见的问题:ReentrantReadWriteLock...
2018-09-17 08:01:00
110
转载 Java并发(6)- CountDownLatch、Semaphore与AQS
引言上一篇文章中详细分析了基于AQS的ReentrantLock原理,ReentrantLock通过AQS中的state变量0和1之间的转换代表了独占锁。那么可以思考一下,当state变量大于1时代表了什么?J.U.C中是否有基于AQS的这种实现呢?如果有,那他们都是怎么实现的呢?这些疑问通过详细分析J.U.C中的Semaphore与CountDownLatch类后,将会得到解答。...
2018-08-30 07:30:00
103
转载 Java并发(5)- ReentrantLock与AQS
引言在synchronized未优化之前,我们在编码中使用最多的同步工具类应该是ReentrantLock类,ReentrantLock拥有优化后synchronized关键字的性能,又提供了更多的灵活性。相比synchronized,他在功能上更加强大,具有等待可中断,公平锁以及绑定多个条件等synchronized不具备的功能,是我们开发过程中必须要重点掌握的一个关键并发类。Re...
2018-08-13 10:05:00
210
转载 Java并发(4)- synchronized与CAS
引言上一篇文章中我们说过,volatile通过lock指令保证了可见性、有序性以及“部分”原子性。但在大部分并发问题中,都需要保证操作的原子性,volatile并不具有该功能,这时就需要通过其他手段来达到线程安全的目的,在Java编程中,我们可以通过锁、synchronized关键字,以及CAS操作来达到线程安全的目的。synchronized在Java的并发编程中,保证线程同步最...
2018-08-01 11:24:00
183
转载 Java并发(3)- 聊聊Volatile
引言谈到volatile关键字,大多数开发者都有一定了解,可以说是开发者非常熟悉,深入之后又非常陌生的一个关键字。相当于轻量的synchronized,也叫轻量级锁,与synchronized相比性能上开销较少,同时又具备了可见性、有序性以及部分原子性,是Java并发需中非常重要的一个关键字。这篇文章我们将从volatile底层原理上来深入剖析他是怎么保证可见性、有序性以及部分原子性的...
2018-07-26 00:17:00
90
转载 Java并发(2)- 聊聊happens-before
引言上一篇文章聊到了Java内存模型,在其中我们说JMM是建立在happens-before(先行发生)原则之上的。为什么这么说呢?因为在Java程序的执行过程中,编译器和处理器对我们所写的代码进行了一系列的优化来提高程序的执行效率。这其中就包括对指令的“重排序”。重排序导致了我们代码并不会按照代码编写顺序来执行,那为什么我们在程序执行后结果没有发生错乱,原因就是Java内存模型遵...
2018-07-19 07:12:00
85
转载 Java并发(1)- 聊聊Java内存模型
引言在计算机系统的发展过程中,由于CPU的运算速度和计算机存储速度之间巨大的差距。为了解决CPU的运算速度和计算机存储速度之间巨大的差距,设计人员在CPU和计算机存储之间加入了高速缓存来做为他们之间的桥梁,在运算时,先将数据拷贝到高速缓存中,计算完成后再将结果写入计算机存储,这样大大提高了计算效率,避免重复多次访问计算机存储造成的cpu资源浪费。尽管这样,CPU还是存在很多空闲的时间...
2018-07-18 22:46:00
80
转载 Java集合(5)一 HashMap与HashSet
目录Java集合(1)一 集合框架Java集合(2)一 ArrayList 与 LinkListJava集合(3)一 红黑树、TreeMap与TreeSet(上)Java集合(4)一 红黑树、TreeMap与TreeSet(下)Java集合(5)一 HashMap与HashSet引言HashMap<K,V>和TreeMap<K,V>都是从键映射到值的...
2017-12-12 13:45:00
86
转载 Java集合(4)一 红黑树、TreeMap与TreeSet(下)
目录Java集合(1)一 集合框架Java集合(2)一 ArrayList 与 LinkListJava集合(3)一 红黑树、TreeMap与TreeSet(上)Java集合(4)一 红黑树、TreeMap与TreeSet(下)Java集合(5)一 HashMap与HashSet引言在Java集合(3)一 红黑树、TreeMap与TreeSet(上)中从二叉树的遍历、添加和...
2017-12-12 07:36:00
127
转载 Java集合(3)一 红黑树、TreeMap与TreeSet(上)
目录Java集合(1)一 集合框架Java集合(2)一 ArrayList 与 LinkListJava集合(3)一 红黑树、TreeMap与TreeSet(上)Java集合(4)一 红黑树、TreeMap与TreeSet(下)Java集合(5)一 HashMap与HashSet引言在系列的第一篇文章中说过Map<K,V>接口与Set<E>接口,Se...
2017-12-11 13:54:00
117
转载 Java集合(2)一 ArrayList 与 LinkList
目录Java集合(1)一 集合框架Java集合(2)一 ArrayList 与 LinkListJava集合(3)一 红黑树、TreeMap与TreeSet(上)Java集合(4)一 红黑树、TreeMap与TreeSet(下)Java集合(5)一 HashMap与HashSet引言ArrayList<E>和LinkList<E>在继承关系上都继承自...
2017-12-11 06:54:00
149
转载 Java集合(1)一 集合框架
目录Java集合(1)一 集合框架Java集合(2)一 ArrayList 与 LinkListJava集合(3)一 红黑树、TreeMap与TreeSet(上)Java集合(4)一 红黑树、TreeMap与TreeSet(下)Java集合(5)一 HashMap与HashSet引言集合在任何语言中都是比较重要的基础知识,不同的集合在实现上采用了各种不同的数据结构,导致了各...
2017-12-08 10:34:00
100
转载 理解设计模式之----命令模式
零零碎碎的了解过部分设计模式,但没有系统的学习过,最近晚上有点时间,就买了本程杰的《大话设计模式》,最近想系统的学习下。当看到命令模式的时候,感觉并不是太好理解,于是上网搜索了些资料。发现对设计模式的看法多少很多文章都有些不一样,于是想写下自己对命令模式的一些看法,以加深理解。要是文章有不对的地方,希望大家能提出改进建议。目的:任何模式的出现,都是为了解决一些特定的场景的耦合问题...
2015-01-03 22:33:00
118
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人