摘要: 亨元模式和单例模式相似,都是为了节省内存。 对于一个可复用的对象,一百个需要用到的地方获得同一个对象比创建一百个新的对象更节省内存,这就是单例模式。 亨元模式在单例的基础上进行了拓展,把状态分成可共享的内部状态和不可共享的外部状态。能共享内部状态的获取同一个对象。 亨元模式的核心在Factory,它 阅读全文
posted @ 2018-08-14 15:19 蒋曾 阅读(118) 评论(0) 推荐(0) 编辑
摘要: 责任链模式让处理请求的对象形成一条链,链中总有一个对象来处理请求。 代码如下: 先写处理对象: 再写具体实现: 最后测试,让三个实现形成链: 比如一个大于二十的数,就会经过HanderA,HanderB,最后在HanderC进行处理。 阅读全文
posted @ 2018-08-14 11:59 蒋曾 阅读(100) 评论(0) 推荐(0) 编辑
摘要: 命令模式把请求操作的对象和执行操作的对象解耦。 代码如下: 先写命令真正的执行者 再写对命令的抽象 然后是请求操作命令的类 最后写一个测试 阅读全文
posted @ 2018-08-14 11:55 蒋曾 阅读(127) 评论(0) 推荐(0) 编辑
摘要: 策略模式是为了方便替换封装好的算法,和工厂模式有相似的地方,区别在于工厂模式目的是选择对象,策略模式是替换算法。 先写一个接口 然后两个算法实现 再写一个上下文类 最后测试 另外,策略模式可以很简单工厂很好的结合,比如可以通过String的传入决定context要set什么。 阅读全文
posted @ 2018-08-10 11:35 蒋曾 阅读(124) 评论(0) 推荐(0) 编辑
摘要: 一、简单工厂模式 在我看来该模式的本质就是通过工厂的选择进行对象的创建 先写一个接口 写两个实现类 写工厂 最后测试 二、工厂方法模式 将工厂类抽象,让他的每一个实现对应一个具体创建的操作 测试 三、抽象工厂 抽象工厂就是把一类相关性高的抽象为一个接口, 比如上面的加法减法可以抽象成一个基本运算工厂 阅读全文
posted @ 2018-08-10 11:22 蒋曾 阅读(101) 评论(0) 推荐(0) 编辑
摘要: 锁是一种悲观策略,总是觉得会出问题,所以小心翼翼地操作。 无锁是一种乐观策略,总是假设不会出现问题,如果出现问题,那就重新操作。无锁一般使用CAS作为策略。 比较交换CAS: CAS算法包括三个参数:需要更新的变量,预期值,更新值。只有当需要更新的值等于预期值时,说明其他线程没有对它进行操作,使需要 阅读全文
posted @ 2018-08-07 16:21 蒋曾 阅读(186) 评论(0) 推荐(0) 编辑
摘要: 如果说锁是让线程有序的争夺资源的话,那么ThreadLocal就是让每个线程都有一份资源。 打个比方,锁是让一百个人争夺一只笔区写字,ThreadLocal就是一百个人每人都有一只笔,在轮到他们写字的时候写。 写个简单的例子: Demo里有一个test内部类,有一百个线程,每个线程都有一个test类 阅读全文
posted @ 2018-08-07 15:35 蒋曾 阅读(195) 评论(0) 推荐(0) 编辑
摘要: 如果说垃圾回收算法是内存回收的方法论,那么垃圾收集器就是算法的具体实现。 这里讨论jdk1.7Update14之后Hotspot的收集器。 这个虚拟机包含的收集器如下图所示: 1、Serial收集器 它是一个新生代的单线程收集器,之所以叫单线程是因为,它不仅只使用一个CPU一个线程,而且在它进行垃圾 阅读全文
posted @ 2018-08-03 16:04 蒋曾 阅读(93) 评论(0) 推荐(0) 编辑
摘要: 一、提高锁性能的建议 (1)减小锁持有时间: 对于上面这种,可以只加锁给需要加锁的部分,改进如下: (2)减小锁粒度: 如ConcurrentHashMap,把Map分成Segment,再给每个Segment加锁,详情见原来的博客。 (3)读写分离锁代替独占锁: 使用读写锁是减小锁粒度的一种特殊方法 阅读全文
posted @ 2018-08-03 15:42 蒋曾 阅读(455) 评论(0) 推荐(0) 编辑
摘要: 1、线程安全的HashMap 如果需要一个线程安全的HashMap ,可以使用集合工具类的synchronizedMap(Map<K,V> m)方法实现, 进到方法里面, 它返回一个内部类,进入内部类 发现它是用的代理的方法来实现的,所有功能全都由传进来的Map,也就是m实现,它只负责给方法加锁。如 阅读全文
posted @ 2018-08-03 15:00 蒋曾 阅读(114) 评论(0) 推荐(0) 编辑