自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Jdk1.6 Collections Framework源码解析(12)-TreeMap、TreeSet

Jdk1.6 Collections Framework源码解析(12)-TreeMap、TreeSet作者:大飞 功能简介:TreeMap是一种有序的Map(K,V)容器,Key在容器中按照某种顺序排列,该顺序由给定的比较器或者Key自身的顺序来决定。在TreeMap内部,所有的Key由红黑树的结构组织而成,对TreeMap的常规操作:查找、插入和删除的平均时间复杂...

2016-01-03 16:06:32 223

原创 Jdk1.6 Collections Framework源码解析(11)-EnumSet

Jdk1.6 Collections Framework源码解析(11)-EnumSet作者:大飞 功能简介:EnumSet是一种针对Enum类型提供的特殊的Set,每个EnumSet只能基于一个Enum类型来建立。EnumSet内部采用位域的方式建立(相当于bit数组),所以操作起来非常高效(几乎所有的基本操作都能在常数时间内完成),包括retainAll和reta...

2015-12-29 18:25:57 311

原创 Java与锁的一些简单总结

Java与锁的一些简单总结作者:大飞 前言       从开始写Java到现在,从开始不知道锁是什么,怎么用,更不知道为什么要用。到现在能够在必要的场景下正确的使用一些锁。这过程中经历了对锁的不断尝试和理解,这篇文章就来做一下Java里面关于锁的一些简单的总结。       有错误的地方请指正,有没提到的内容请补充! 在Java中,什么情况下需要使用锁?...

2015-12-07 15:22:50 276

原创 关于Java String的一些总结

关于Java String的一些总结作者:大飞 不变模式设计       String是典型的不变模式设计。主要体现在两点:       1.String Class由final修饰,保证了无法产生可改变String语义的子类。       2.一些有"修改"行为的方法都会产生新的String实例,如concat、replace等方法。 ==相关的问题...

2015-12-01 16:28:27 204

原创 Jdk1.8 JUC源码增量解析(2)-atomic-LongAdder和LongAccumulator

Jdk1.8 JUC源码增量解析(2)-atomic-LongAdder和LongAccumulator作者:大飞 功能简介:LongAdder是jdk1.8提供的累加器,基于Striped64实现。它常用于状态采集、统计等场景。AtomicLong也可以用于这种场景,但在线程竞争激烈的情况下,LongAdder要比AtomicLong拥有更高的吞吐量,但会耗费更多的内存空...

2015-11-27 19:49:59 244

原创 Jdk1.8 JUC源码增量解析(1)-atomic-Striped64

Jdk1.8 JUC源码增量解析(1)-atomic-Striped64作者:大飞 功能简介:Striped64是jdk1.8提供的用于支持如Long累加器,Double累加器这样机制的基础类。Striped64的设计核心思路就是通过内部的分散计算来避免竞争(比如多线程CAS操作时的竞争)。Striped64内部包含一个基础值和一个单元哈希表。没有竞争的情况下,要累...

2015-11-27 19:41:08 304 1

原创 Jdk1.7 JUC源码增量解析(6)-Phaser

Jdk1.7 JUC源码增量解析(6)-Phaser作者:大飞 功能简介:Phaser是jdk1.7提供的类似于CyclicBarrier和CountDownLatch的同步机制。它支持更灵活的使用方式:1.使用过程中可以随时注册和注销参与者;2.不同于CyclicBarrier,分离出"到达"和"等待"机制;3.支持结束,默认情况下,当没有参与者的时候Phaser就结...

2015-11-26 14:26:24 297

原创 Jdk1.7 JUC源码增量解析(5)-ForkJoin-ForkJoin框架其他过程及方法

Jdk1.7 JUC源码增量解析(5)-ForkJoin-ForkJoin框架其他过程及方法作者:大飞 概述:这篇会看一下ForkJoin框架的其他过程,如取消任务、关闭Pool,以及前面没分析到一些方法。 源码分析: 前面我们看到,ForkJoinTask本身也是Future的实现,所以也会有取消过程,看下实现: public bool...

2015-11-21 23:14:35 217

原创 Jdk1.7 ForkJoin框架源码解析汇总

Jdk1.7 ForkJoin框架源码解析汇总  Jdk1.7 JUC源码增量解析(2)-ForkJoin-框架概览 Jdk1.7 JUC源码增量解析(3)-ForkJoin-非ForkJoin任务的执行过程 Jdk1.7 JUC源码增量解析(4)-ForkJoin-ForkJoin任务的fork/join过程 Jdk1.7 JUC源码增量解析(5)-For...

2015-11-20 16:54:36 165

原创 Jdk1.7 JUC源码增量解析(4)-ForkJoin-ForkJoin任务的fork/join过程

Jdk1.7 JUC源码增量解析(4)-ForkJoin-ForkJoin任务的fork/join过程作者:大飞 概述:这篇通过分析一个ForkJoin任务的执行过程来分析ForkJoin的相关代码,主要侧重于分裂(fork)/合并(join)过程。 源码分析:        还是先看一个代码示例,这个示例介绍篇出现过,这里只贴出任务代码:publ...

2015-11-20 16:47:20 231

原创 Jdk1.7 JUC源码增量解析(3)-ForkJoin-非ForkJoin任务的执行过程

Jdk1.7 JUC源码增量解析(3)-ForkJoin-非ForkJoin任务的执行过程作者:大飞 概述:这篇通过分析一个非ForkJoin(Runnable或者Callable)任务的执行过程来分析ForkJoin的相关代码,注意这里说的非ForkJoin任务实际上也是ForkJoinTask,只是没有分裂(fork)/合并(join)过程。 源码分析:...

2015-11-20 11:50:25 295

原创 Jdk1.7 JUC源码增量解析(2)-ForkJoin-框架概览

Jdk1.7 JUC源码增量解析(2)-ForkJoin-框架概览作者:大飞 ForkJoin框架是什么?       ForkJoin框架是jdk1.7提供的一个并行计算框架。ForkJoin框架能干什么?       首先ForkJoin框架是针对一些符合ForkJoin模型的任务而设计的,那什么是ForkJoin模型呢?看个图先:  ...

2015-11-19 17:31:21 181

原创 Jdk1.7 JUC源码增量解析(1)-FutureTask

Jdk1.7 JUC源码增量解析(1)-FutureTask作者:大飞 功能简介:FutureTask是一种异步任务(或异步计算),举个栗子,主线程的逻辑中需要使用某个值,但这个值需要负责的运算得来,那么主线程可以提前建立一个异步任务来计算这个值(在其他的线程中计算),然后去做其他事情,当需要这个值的时候再通过刚才建立的异步任务来获取这个值,有点并行的意思,这样可以缩短整...

2015-11-12 18:30:15 286

原创 Java与IEEE754浅浅谈

Java与IEEE754浅浅谈作者:大飞 怎么用二进制来表示小数呢?       假设我们要用二进制来表示小数5.5,怎么搞?              按照常规思路,首先用二进制表示一下5,是101,那5.5岂不就是101.101(呵呵哒...)。              我们来看下分解过程,5=4+1,也就是1*22 + 0*21 + 1*20,即1...

2015-11-11 17:39:38 645

原创 disruptor-3.3.2源码解析汇总

disruptor-3.3.2源码解析汇总 disruptor-3.3.2源码解析(1)-序列 disruptor-3.3.2源码解析(2)-队列 disruptor-3.3.2源码解析(3)-发布事件 disruptor-3.3.2源码解析(4)-处理事件 disruptor-3.3.2源码解析(5)-框架支持 完毕! 欢迎加入扣扣群一...

2015-11-10 11:18:44 161

原创 disruptor-3.3.2源码解析(5)-框架支持

disruptor-3.3.2源码解析(5)-框架支持作者:大飞 更方便的使用Disruptor:       前面几篇看了Disruptor中的一些重要组件和组件的运行方式,也通过手动组合这些组件的方式给出了一些基本的用例。框架也提供了一个DSL-style API,来帮助我们更容易的使用框架,屏蔽掉一些细节(比如怎么构建RingBuffer、怎么关联追踪序列等)...

2015-11-09 15:04:49 276

原创 disruptor-3.3.2源码解析(4)-处理事件

disruptor-3.3.2源码解析(4)-处理事件作者:大飞 Disruptor中如何处理事件:       disruptor中提供了专门的事件处理器接口,先看下接口定义:/** * 事件处理器会等待RingBuffer中的事件变为可用(可处理),然后处理可用的事件。 * 一个事件处理器通常会关联一个线程。 */public inter...

2015-11-09 14:52:22 475

原创 disruptor-3.3.2源码解析(3)-发布事件

disruptor-3.3.2源码解析(3)-发布事件作者:大飞 Disruptor中如何发布事件:       前面两篇看了disruptor中的序列和队列,这篇说一下怎么往RingBuffer中发布事件。这里也需要明确一下,和一般的生产者/消费者模式不同(如果以生产者/消费者的模式来看待disruptor的话),disruptor中队列里面的数据一般称为事件,R...

2015-11-09 14:34:48 276

原创 disruptor-3.3.2源码解析(2)-队列

disruptor-3.3.2源码解析(2)-队列作者:大飞 Disruptor中的队列-RingBuffer:       RingBuffer是disruptor最重要的核心组件,如果以生产者/消费者模式来看待disruptor框架的话,那RingBuffer就是生产者和消费者的工作队列了。RingBuffer可以理解为是一个环形队列,那内部是怎么实现的呢?看下...

2015-11-09 14:24:26 303

原创 disruptor-3.3.2源码解析(1)-序列

disruptor-3.3.2源码解析(1)-序列作者:大飞 Disruptor中的序列-Sequence:       disruptor中较为重要的一个类是Sequence。我们设想下,在disruptor运行过程中,事件发布者(生产者)和事件处理者(消费者)在ringbuffer上相互追逐,由什么来标记它们的相对位置呢?它们根据什么从ringbuffer上发布...

2015-11-09 14:16:50 350

原创 Jdk1.6 JUC源码解析(27)-Exchanger

Jdk1.6 JUC源码解析(27)-Exchanger作者:大飞 功能简介:Exchanger是一种线程间安全交换数据的机制。可以和之前分析过的SynchronousQueue对比一下:线程A通过SynchronousQueue将数据a交给线程B;线程A通过Exchanger和线程B交换数据,线程A把数据a交给线程B,同时线程B把数据b交给线程A。可见,Synchrono...

2015-11-03 03:18:33 172

原创 Jdk1.6 JUC源码解析(26)-ConcurrentSkipListMap、ConcurrentSkipListSet

Jdk1.6 JUC源码解析(26)-ConcurrentSkipListMap、ConcurrentSkipListSet作者:大飞 功能简介:ConcurrentSkipListMap是一种线程安全的有序的Map。一般我们使用有序Map,不要求线程安全的情况下,可以使用TreeMap,要求线程安全的话,就可以使用ConcurrentSkipListMap。Conc...

2015-11-03 03:08:56 263

原创 Jdk1.6 JUC源码解析(25)-ConcurrentHashMap

Jdk1.6 JUC源码解析(25)-ConcurrentHashMap作者:大飞 功能简介:ConcurrentHashMap是一种线程安全的HashMap。相对于HashTable和Collections.synchronizedMap(),ConcurrentHashMap具有更好的性能和伸缩性,是由于其使用了分段锁的策略,将内部数据分为多个段,每个段单独加锁,而不...

2015-10-30 19:02:33 165

原创 Jdk1.6 集合框架源码解析汇总

Jdk1.6 集合框架源码解析汇总 非并发:       Jdk1.6 Collections Framework源码解析(1)-ArrayList       描述:动态扩容的数组。        Jdk1.6 Collections Framework源码解析(2)-LinkedList       描述:双向链表。              Jdk...

2015-10-29 22:05:26 201

原创 Jdk1.6 JUC源码解析(24)-ConcurrentLinkedQueue

Jdk1.6 JUC源码解析(24)-ConcurrentLinkedQueue作者:大飞 功能简介:ConcurrentLinkedQueue是一种基于单向链表实现的无界的线程安全队列。队列中的元素遵循先入先出(FIFO)的规则。新元素插入到队列的尾部,从队列头部取出元素。ConcurrentLinkedQueue内部采用一种wait-free(无等待)算法来实现。...

2015-10-29 19:02:50 189

原创 Jdk1.6 JUC源码解析(23)-CopyOnWriteArrayList、CopyOnWriteArraySet

Jdk1.6 JUC源码解析(23)-CopyOnWriteArrayList、CopyOnWriteArraySet作者:大飞 功能简介:CopyOnWriteArrayList是一种线程安全的ArrayList。顾名思义,有写操作时,就会copy一个新的内部数组出来替换掉旧的数组。这样做的好处是,遍历操作不用加锁了,但是遍历的数组不会感知即时变更,只是一个快照。在某些场...

2015-10-29 18:55:33 142

原创 Jdk1.6 JUC源码解析(22)-LinkedBlockingDeque

Jdk1.6 JUC源码解析(22)-LinkedBlockingDeque作者:大飞 功能简介:LinkedBlockingDeque是一种基于双向链表实现的有界的(可选的,不指定默认int最大值)阻塞双端队列。       双端队列一般适用于工作密取模式,即每个消费者都拥有自己的双端队列,如果某个消费者完成了自己队列的全部任务,可以到其他消费者双端队列尾部秘密获...

2015-10-29 18:47:49 174

原创 Jdk1.6 JUC源码解析(21)-ExecutorCompletionService

Jdk1.6 JUC源码解析(21)-ExecutorCompletionService作者:大飞 功能简介:ExecutorCompletionService用于执行一批任务,然后按照任务执行完成的顺序来获取任务结果。你甚至可以在获取到了若干个执行结果后,把其他的任务取消掉(ThreadPoolExecutor中的invokeAny就是通过这货实现的)。比如这样的场景:你...

2015-10-28 19:37:04 145

原创 Jdk1.6 JUC源码解析(20)-Executors

Jdk1.6 JUC源码解析(20)-Executors作者:大飞 功能简介:Executors是JUC包提供的一个工具性质的帮助类,它针对ExecutorService、ScheduledExecutorService、ThreadFactory和Callable提供了一系列工厂方法和工具方法。源码分析:首先看下针对ExecutorService提供的一些...

2015-10-28 19:28:37 143

原创 Jdk1.6 JUC源码解析(19)-ScheduledThreadPoolExecutor

Jdk1.6 JUC源码解析(19)-ScheduledThreadPoolExecutor作者:大飞 功能简介:ScheduledThreadPoolExecutor是一种类似Timer的定时器或者说是调度器,和Timer比起来主要有几点好处:1.多线程的定时调度,timer是单线程的,每个timer实例只有一个工作线程。2.由于继承自ThreadPoolExecutor...

2015-10-27 19:46:14 195

原创 Jdk1.6 JUC源码解析(18)-DelayQueue

Jdk1.6 JUC源码解析(18)-DelayQueue作者:大飞 功能简介:DelayQueue是一种无界的阻塞队列,队列里只允许放入可以"延期"的元素,队列中列头的元素是最先"到期"的元素。如果队列中没有任何元素"到期",尽管队列中有元素,也不能从队列头获取到任何元素。源码分析:首先还是看一下内部数据结构:public class DelayQ...

2015-10-27 19:25:36 179

原创 Jdk1.6 JUC源码解析(17)-ThreadPoolExecutor

Jdk1.6 JUC源码解析(17)-ThreadPoolExecutor作者:大飞 功能简介:ThreadPoolExecutor是JUC包中提供的线程池,使用ThreadPoolExecutor的好处一方面是能重用线程资源,避免重复创建线程带来的开销;另一方面是ThreadPoolExecutor提供了内部资源(线程、任务)的管理功能,方便我们监控线程池工作状态。...

2015-10-27 08:44:32 187

原创 Jdk1.6 JUC源码解析(16)-FutureTask

Jdk1.6 JUC源码解析(16)-FutureTask作者:大飞 功能简介:FutureTask是一种异步任务(或异步计算),举个栗子,主线程的逻辑中需要使用某个值,但这个值需要复杂的运算得来,那么主线程可以提前建立一个异步任务来计算这个值(在其他的线程中计算),然后去做其他事情,当需要这个值的时候再通过刚才建立的异步任务来获取这个值,有点并行的意思,这样可以缩短整个...

2015-10-26 19:31:50 344

原创 Jdk1.6 JUC源码解析(15)-SynchronousQueue

Jdk1.6 JUC源码解析(15)-SynchronousQueue作者:大飞 功能简介:SynchronousQueue是一种特殊的阻塞队列,它本身没有容量,只有当一个线程从队列取数据的同时,另一个线程才能放一个数据到队列中,反之亦然。存取过程相当于一个线程把数据(安全的)交给另一个线程的过程。SynchronousQueue也支持公平和非公平模式。源码分析...

2015-10-26 19:19:10 154

原创 Jdk1.6 JUC源码解析(14)-PriorityBlockingQueue

Jdk1.6 JUC源码解析(14)-PriorityBlockingQueue作者:大飞 功能简介:PriorityBlockingQueue是一种基于PriorityQueue实现的无界的阻塞队列。队列中的元素按照某种排序规则出队。插入队列的元素必须是可比较的。源码分析:首先看下PriorityBlockingQueue内部的数据结构: pu...

2015-10-25 03:22:36 144

原创 Jdk1.6 JUC源码解析(13)-LinkedBlockingQueue

Jdk1.6 JUC源码解析(13)-LinkedBlockingQueue作者:大飞 功能简介:LinkedBlockingQueue是一种基于单向链表实现的有界的(可选的,不指定默认int最大值)阻塞队列。队列中的元素遵循先入先出(FIFO)的规则。新元素插入到队列的尾部,从队列头部取出元素。(在并发程序中,基于链表实现的队列和基于数组实现的队列相比,往往具有更高的吞...

2015-10-24 22:28:15 158

原创 Jdk1.6 JUC源码解析(12)-ArrayBlockingQueue

Jdk1.6 JUC源码解析(12)-ArrayBlockingQueue作者:大飞 功能简介:ArrayBlockingQueue是一种基于数组实现的有界的阻塞队列。队列中的元素遵循先入先出(FIFO)的规则。新元素插入到队列的尾部,从队列头部取出元素。和普通队列有所不同,该队列支持阻塞操作。比如从空队列中取元素,会导致当前线程阻塞,直到其他线程将元素放入队列;将元...

2015-10-23 20:03:48 122

原创 Jdk1.6 JUC源码解析(11)-CyclicBarrier

Jdk1.6 JUC源码解析(11)-CyclicBarrier作者:大飞 功能简介:CyclicBarrier是一种可重复使用的栅栏机制,可以让一组线程在某个点上相互等待,这个点就可以类比为栅栏。并且这个栅栏是可重复使用的,这点可以和前面分析过的CountDownLatch做对比,CountDownLatch只能用一次。CyclicBarrier还支持在所有线程到达...

2015-10-23 19:56:06 143

原创 Jdk1.6 JUC源码解析(10)-Semaphore

Jdk1.6 JUC源码解析(10)-Semaphore作者:大飞 功能简介:Semaphore是一种基于计数的信号量,管理了一组许可。线程可以申请许可,当信号量中有许可时,线程申请成功,拿走一个许可;没有许可时,线程阻塞等待其他线程用完了许可,归还给信号量。这个许可不是真正的许可(比如凭证),只是一个计数,线程也不会真正使用这些许可。Semaphore一般用来构建一...

2015-10-22 18:52:09 163

原创 Jdk1.6 JUC源码解析(9)-CountDownLatch

Jdk1.6 JUC源码解析(9)-CountDownLatch作者:大飞 功能简介:CountDownLatch是一种锁,称为闭锁。可以让一个或多个线程等待另外一个或多个线程执行完毕后再执行。CountDownLatch也是基于AQS构建,使用共享模式。CountDownLatch中提供一个count值来表示要等待的(其他任务)完成次数,常规用法有两种:Coun...

2015-10-22 18:47:02 238

空空如也

空空如也

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

TA关注的人

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