自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 责任链模式

责任链模式责任链模式将请求在一个对象处理器链上传递,直到某个对象处理这个请求成功为止。该模式简化了请求的处理,每个对象处理器仅负责自己的单一职责,因此责任链模式也称为职责链模式。UML类图其中Handler是一个抽象类,它有一个successor字段,该字段指向职责链下一个处理器,方法handlerRequest处理请求。看下代码实现代码实现Handler类 package com.lms...

2018-04-22 13:25:11 353

原创 IdentityHashMap源码详解

IdentityHashMap是一致性哈希表,使用引用相等,而不是equals方法来比较两个对象的相等性。因此,IdentityHashMap中,如果存在两个键key1和key2,当且仅当key1==key2时,两个键相等。

2017-11-20 22:33:11 1385

原创 享元模式

享元模式的核心思想其实就是共享,节省内存,减少开销,例如项目中的对象共享,利用享元工厂维护已经创建的或者预先创建的对象,当需要时再去该工厂里拿即可。

2017-11-12 23:22:55 468

原创 ConcurrentHashMap源码详解

ConcurrentHashMap是线程安全的哈希表,不同于HashTable,后者在方法上增加synchronized关键字,利用对象同步锁实现线程之间的同步。显然,HashTable实现线程安全的方式太“重”,并发度高的情况下,很多线程争用同一把锁,吞吐量较低。ConcurrentHashMap通过锁分段技术,只有在同一个段内,才会存在锁竞争,提高了并发度。

2017-10-12 20:35:27 1753 1

原创 ForkJoin框架(二):ForkJoinTask

ForkJoinTask将任务fork成足够小的任务,并发解决这些小任务,然后将这些小任务结果join。这种思想充分利用了CPU的多核系统,使得CPU的利用率得到大幅度提升,减少了任务执行时间。

2017-10-08 10:03:29 7549

原创 CopyOnWriteArrayList源码详解

CopyOnWriteArrayList是线程安全集合,它内部通过一个数组存储元素。通过名字可以看出,这是一个“写时复制”的List,每次要修改该List的时候,都会new一个新的数组,copy原来数组元素到该新的数组,并在该新的数组上修改,修改完后,更新原有数组引用到该新的数组。

2017-09-26 20:47:38 487

原创 LinkedList源码详解

链表是我们接触最多的数组结构之一,Java的LinkedList实现了链表这一数据结构,并且实现的是双向链表,LinkedList还提供了双端队列的操作。LinkedList可以存储任何元素,包括null。和ArrayList不同的是,LinkedList是一个”顺序存取“的List,而ArrayList是一个”随机存取“的List。

2017-09-23 16:32:32 493

原创 ArrayList源码解析

ArrayList用数组作为内部元素的存储,该数组的大小就是ArrayList的容量,它内部还维护了一个变量size保存当前元素的个数。

2017-09-21 22:19:33 441

原创 冒泡排序

冒泡排序遍历待排序的数组,比较相邻两个元素的大小,如果顺序错误就将这两个相邻元素交换。每次外循环都将较大的元素往后移,类似气泡上浮过程变得越来越大,取名为冒泡排序。

2017-09-17 14:02:57 460

原创 组合模式

组合模式(Composite),将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性,用户不用关心自己处理的是叶子节点还是组合节点。

2017-09-17 09:22:40 655

原创 ForkJoin框架(一):ForkJoin框架概述

JAVA 1.7引入了ForkJoin框架,该框架由Java大神Doug Lea所写,它是一个并发执行任务的框架。

2017-09-12 21:54:14 1835

原创 简单选择排序

简单选择排序的思路很简单,首先,找到数组中最小的元素,将它和数组中的第一个元素交换,其次在剩下的元素中找到最小的元素,将它与数组中的第二个元素交换,如此往复,直到将整个数组排序。

2017-09-10 20:28:52 747

原创 线程池原理(七):线程池的使用

这篇文章通过介绍线程池的常见用法,总结前面学习到的内容。

2017-09-10 09:07:15 1054 1

原创 线程池原理(六):Executors

Executors是线程池的工厂类,可以创建ExecutorService、ScheduledExecutorService、ThreadFactory、Callable的实例。

2017-09-09 15:48:20 1160

原创 线程池原理(五):CompletionService

任务提交到线程池后,将任务的Future放到一个List中,然后遍历List,通过Future的get方法得到返回值。如果在遍历过程中get方法阻塞,即使位于List后面的Future已经完成,遍历List的线程也要继续等待,这就对效率有比较大的影响。我们希望任务结束后,返回值能够立即被获取,而不是要等待其他任务结束,CompletionService正是为此而生。

2017-09-05 22:50:34 1020

原创 快速排序

快速排序的基本思想是通过划分子数组实现的,对于数组A[p…r],划分子数组后得到一个索引q,使得A[p…q-1]子数组的值都小于A[q],A[q+1…r]子数组的值都大于等于A[q]。子数组划分后,再通过相同的方法递归处理两个子数组,最终达到整个数组排序的目的。

2017-09-04 22:15:55 839

原创 线程池原理(四):ScheduledThreadPoolExecutor

ScheduledThreadPoolExecutor用于定时任务,这里的定时意义在于:指定延时后执行任务和周期性重复执行任务。

2017-09-03 10:49:49 20717 2

原创 线程池原理(三):ThreadPoolExecutor

ThreadPoolExecutor就是我们经常说的大名鼎鼎的线程池,Executors工厂创建的线程池都是该类的实例,通过调节参数的大小创建适用于各个场景的线程池。

2017-08-29 21:14:58 2180

原创 线程池原理(二):可执行任务及其返回值

线程池将任务提交和任务执行分离,线程只是一个工作者,它可以执行有返回值的任务,也可以执行没有返回值的任务。Runnable是没有返回值的任务,Callable是有返回值的任务,Future表示任务的执行结果。

2017-08-19 22:30:24 1845 1

原创 Condition详解

JDK的Lock是为了替代synchronized同步锁,Condition是为了替代Object的对象监视器锁。利用Condition,每个对象可以有多个不同的等待集(wait-sets),这样多个线程可以分别在同一个对象的多个等待集上等待,相对于Object的对象监视器锁,Condition提供了更加精细化的锁操作。

2017-08-19 09:19:47 953

原创 线程池原理(一):基本框架

现代机器CPU基本都是多核系统,利用多线程可以明显提高系统的效率,但是如果不控制线程的使用,会给系统带来严重的后果,因此,JDK提供了线程池供我们使用。有了线程池,每到达一个任务,从线程池调度一个空闲的线程来执行任务,避免了每次都要去创建线程带来的开销。

2017-08-16 23:34:57 1863

原创 桥接模式

桥接模式,将抽象部分和它的实现部分分离,使它们都可以独立地变化,也可以这样理解,实现系统有多角度的分类,每一种分类都有可能变化,那么就把这种多角度分离出来让它们独立的变化,减少它们之间的耦合。

2017-08-15 21:42:00 1567

原创 堆排序

堆排序算法中一般使用二叉堆,最大堆中的子节点值小于父节点的值,因此最大堆的根节点值最大。通过不断的将根节点值移到堆的末尾,并且调整堆使其满足最大堆的特性,达到排序的目的。

2017-08-12 09:32:20 1077

原创 LinkedHashMap源码详解

HashMap查找效率很高,但是也有一个缺点,即遍历HashMap是无序的。LinkedHashMap顾名思义,是链表和哈希表的结合,链表具有天然的有序性,这里的有序不是按照节点大小排序,而是按照节点的插入顺序排序或者节点的访问顺序排序

2017-08-10 22:21:24 761 1

原创 java synchronized关键字原理

synchronized关键字是jdk内置的同步锁,它是解决并发问题的一种最常用的方法。

2017-08-07 21:19:59 599

原创 归并排序

归并排序其实是分治思想的体现,先解决小规模的问题,小规模的问题解决后,大的问题自己就会得到解决。

2017-08-04 21:06:57 505

原创 装饰器模式

简单的说,装饰器模式可能动态的给一个对象增加额外的功能。就像人类通过各种服饰来打扮自己一样,对象通过装饰器模式打扮自己,从而拥有更多功能。

2017-08-03 22:15:50 590

原创 redis持久化

redis是内存数据库,所有的数据库状态、键值对都存储在内存中,为了避免数据丢失,可以将数据持久化到磁盘上。redis服务器启动时可以根据持久化文件还原数据库的状态。redis的持久化有两种方式:RDB持久化和AOF持久化。

2017-08-02 21:13:36 583

转载 Java如何处理InterruptedException?

如何优雅的处理InterruptedException……

2017-07-30 22:18:03 1542

原创 ReentrantLock源码解析

ReentrantLock是JDK内置的显示可重入锁,相对于隐式锁synchronized,ReentrantLock提供了比synchronized更精细化的锁控制

2017-07-30 09:49:05 578

原创 redis数据库

redis提供了键的失效机制、持久化机制,接下来将介绍redis数据库概念、键的失效机制。redis数据库的服务器状态都保存在redisServer结构中。

2017-07-25 09:09:24 639

原创 HashMap源代码详解

HashMap是键值对的集合,其中键不重复并且可以为空,值也可以为空。HaspMap的存取效率非常高,可以在O(1)时间内实现存取操作。HaspMap的实现是线程非安全的,所以在多线程环境下会有并发问题。

2017-07-16 09:45:42 1153

原创 适配器模式

适配器模式属于结构型模式,这个模式将一个类的接口转换成客户希望的另外的一个接口。该模式使得原本两个不兼容的接口可以一起工作。

2017-07-11 22:11:54 540

原创 Map接口和AbstractMap抽象类详解

为了更好的理解JDK的哈希表实现,首先研究Map接口和AbstractMap抽象类,打好基础很重要~

2017-07-09 19:43:40 935

原创 redis对象

前面我们学习了redis各种数据结构,包括简单动态字符串、链表、字典、哈希表、整数集合、压缩列表,其实redis实际不是直接使用这些数据结构的,而是使用称为redis对象的数据结构

2017-07-08 06:44:48 804

原创 设计模式-原型模式

原型模式指的是通过原型实例拷贝新的对象,其实就是通过对象自身复制自己的能力。

2017-07-06 21:43:34 486

原创 redis-压缩列表

redis压缩列表是列表键和哈希键的底层实现之一。当列表和哈希表满足一定条件的时候,底层将采用压缩列表实现

2017-07-04 23:35:40 740

原创 Java final关键字详解

final是java的保留关键字,字面意思是”最终的、不可更改的”,对应到java的使用场景完全适用。java的final关键字可以修饰类、方法、成员变量、局部变量、方法参数。

2017-07-03 22:04:12 580

原创 java序列化机制详解

java序列化是将java对象保存在文件或者通过网络传输的机制,通过实现接口Serializable或者Externalizable标识该类的对象可以序列化和反序列化。

2017-07-02 00:30:28 772

原创 建造者模式

建造者模式(Builder Pattern),将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

2017-06-30 21:41:57 456

空空如也

空空如也

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

TA关注的人

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