小张的专栏

咦,怎么还没长进呢

排序:
默认
按更新时间
按访问量

乱弹 --- Linux 之 I/O模型

随着现在互联网技术的发展,在以前对一个网站的要求都不高,但是现在要求越来越高了,不断的优化服务,不断的提高硬件设施,在以前I/O方面的消耗还影响不大,但是现在I/O的瓶颈越来越凸显,了解I/O模型,能了解I/O的发展历史,同时也能帮助我们写出更加健壮的代码。 一般来说,I/O模型可以分为阻塞/非...

2018-08-12 17:52:12

阅读数:12

评论数:0

Java NIO之Channel、Buffer

Java NIO 由以下几个核心部分组成: Buffer Channel Selector 传统的IO操作面向数据流,面向流 的 I/O 系统一次一个字节地处理数据,意味着每次从流中读一个或多个字节,直至完成,数据没有被缓存在任何地方。 NIO操作面向缓冲区( 面向块),数据从Chann...

2018-08-09 21:03:44

阅读数:22

评论数:0

Spring Session 源码分析(2)——Session机制的实现细节

在Spring Session 源码分析(1)中,梳理了一下Spring Session 接管Tomcat Session的过程,通过配置DelegatingFilterProxy 和指定过滤器名称,spring 接收到请求后,包装HttpServletRequest ,HttpServletRe...

2018-08-07 22:42:22

阅读数:6

评论数:0

深入理解ClassLoader工作机制(jdk1.8)

ClassLoader 顾名思义就是类加载器,ClassLoader 作用: 负责将 Class 加载到 JVM 中 审查每个类由谁加载(父优先的等级加载机制) 将 Class 字节码重新解析成 JVM 统一要求的对象格式 类加载时机与过程 类从被加载到虚拟机内存中开始,直到卸载出内存为...

2018-08-05 23:28:46

阅读数:31

评论数:0

Spring Session 源码分析(1)——springSessionRepositoryFilter

Tomcat Session 对于session 是一个老生畅谈的话题了,Session管理是JavaEE容器比较重要的一部分, Tomcat中主要由每个context容器内的一个Manager对象来管理session。对于这个manager对象的实现,可以根据tomcat提供的接口或基类来自...

2018-08-02 19:38:29

阅读数:14

评论数:0

Java 线程池 --- ThreadPoolExecutor源码分析

在多线程编程中,或多或少都听过或者使用过线程池,合理利用线程池能够带来三个好处。 降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。 提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。 提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源...

2018-01-23 21:13:57

阅读数:144

评论数:0

Java 多线程 --- FutureTask 源码分析

在多线程编程中,创建线程可以直接继承Thread,也可以实现Runnable接口。但是这2种方式都有一个缺陷就是:在执行完任务之后无法获取执行结果。 如果需要获取执行结果,就必须通过共享变量或者使用线程通信的方式来达到效果,这样使用起来就比较麻烦。 而自从Java 1.5开始,就提供了Calla...

2018-01-18 20:07:07

阅读数:123

评论数:0

Java 并发 --- ConcurrentSkipListMap源码分析

在学习ConcurrentSkipListMap 之前 我们需要先来学习一种随机化的数据结构–跳跃表(skip list) 对于数组的查找可以有很多方法,如果是有序的,那么可以采用二分查找,二分查找要求元素可以随机访问,所以决定了需要把元素存储在连续内存。这样查找确实很快,但是插入和删除元素的时...

2018-01-16 19:14:39

阅读数:145

评论数:0

Java 并发 --- Thread 源码浅析

在多线程编程中,如果要使用线程来执行任务,那么最简单的方式就是使用Thread类来创建一个线程,当然也可以使用线程池的方式。 线程是在进程中执行的单位,线程的资源开销相对于进程的开销是相对较少的,所以我们一般创建线程执行,而不是进程执行。 本文不是学习Thread的使用,而是通过Thread类...

2018-01-08 14:10:33

阅读数:154

评论数:0

Java 并发 --- CopyOnWriteArrayList 源码分析

CopyOnWriteArrayList,顾名思义,Write的时候总是要Copy,读写分离的思想,通俗地讲,当我们往一个容器添加元素的时候,不直接往当前容器添加,而是先将当前容器复制出一个新的容器,然后在新的容器里添加元素,添加玩元素之后再讲原来容器的引用指向新的容器。

2018-01-04 12:49:30

阅读数:115

评论数:0

Java 并发 --- 阻塞队列总结

前面我们把阻塞队列学习完了,现在过段时间来进行总结一下,也算是复习回顾知识,比较才能明白使用的场景。

2017-12-27 20:15:49

阅读数:95

评论数:0

Java 并发 --- 非阻塞队列之ConcurrentLinkedQueue源码分析

在并发编程中,有时候需要使用线程安全的队列,如果要实现一个线程安全的队列有两种方式:一种是使用阻塞算法,另一种是使用非阻塞算法,在前面我们逐一分析过阻塞队列,这篇文章过后,会写篇关于阻塞队列的总结,也算是回顾知识,非阻塞的实现方式则可以使用循环cas的方式来实现,对于循环cas的算法,都已经遇到多...

2017-12-19 19:48:53

阅读数:137

评论数:0

Java集合之ConcurrentHashMap源码分析

注:本文源码是JDK8的版本ConcurrentHashMap 介绍(jdk 1.8)ConcurrentHashMap是HashMap的升级版,HashMap是非线程安全的集合,ConcurrentHashMap则可以支持并发操作, HashMap是我们平时开发过程中用的比较多的集合,Conc...

2017-12-16 18:37:19

阅读数:336

评论数:1

Java 并发 --- Exchanger源码分析

Exchanger 是一个用于线程间协作的工具类,Exchanger用于进行线程间的数据交换,它提供一个同步点,在这个同步点,两个线程可以交换彼此的数据。这两个线程通过exchange 方法交换数据,如果第一个线程先执行exchange 方法,它会一直等待第二个线程也执行exchange 方法,当...

2017-12-07 20:42:55

阅读数:682

评论数:0

Java 并发 --- Semaphore源码分析

Semaphore(信号量)是用来控制同时访问特定资源的线程数量,可以用于做流量控制,特别是公共资源有限的应用场景,如果熟悉操作系统的概念,那么肯定对这么名词不陌生,当初在学习Linux进程通信中,也简单的学习过,今天再次接触到Semaphore。

2017-12-03 16:21:18

阅读数:113

评论数:0

Java 并发 --- CyclicBarrier源码分析

CyclicBarrier 介绍(jdk 1.8)CyclicBarrier的字面意思是可循环使用(Cyclic)的屏障(Barrier),它的功能是让一组线程到达一个屏障(也就叫同步点)时被阻塞,直到最后一个线程到达屏障时,屏障才会开门,所有被屏障拦截的线程才会继续运行。

2017-12-02 15:21:01

阅读数:115

评论数:0

Java 并发 --- CountDownLatch源码分析

CountDownLatch是一个同步工具类,它允许一个或多个线程一直等待,直到其他线程的操作执行完后再执行。 实现某个线程等待其余线程完成任务的最简单做法是使用join()方法(join 用于当前执行线程等待被join 线程执行结束),其实现原理就是不停的检查被join 线程是否存活,如果被j...

2017-11-27 21:30:26

阅读数:130

评论数:0

Java集合之HashSet,LinkedHashSet源码分析

HashSet,它是基于HashMap实现的,HashSet底层使用HashMap来保存所有元素,因此HashSet 的实现比较简单,相关HashSet的操作,基本上都是直接调用底层HashMap的相关方法来完成,因此如果明白了HashMap那么HashSet也就自然明白

2017-11-21 20:49:51

阅读数:146

评论数:0

Java 并发 --- 阻塞队列之LinkedBlockingDeque源码分析

LinkedBlockingDeque是基于双向链表的双端有界阻塞队列,默认使用非公平ReentrantLock实现线程安全,默认队列最大长度都为Integer.MAX_VALUE;不允许null元素添加;双端队列可以用来实现 "窃取算法" ,两头都可以操作队列,相对于单端队列...

2017-11-20 14:21:38

阅读数:148

评论数:0

Java集合之TreeMap源码分析

在jdk 1.8 中 HashMap是数组+链表+红黑树实现的,当hash表某个位置上的元素个数超过某个阀值过后就采用红黑树结构,否则采用链表结构,在HashMap中元素 相对插入顺序是无序的,也就是说其遍历顺序不可预测。LinkedHashMap是基于HashMap实现的,使用了双向链表,保证按...

2017-11-19 20:01:08

阅读数:228

评论数:0

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