自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 J.U.C 原子类系列之AtmoicIntegerArray

简介原子化数组包括:AtomicIntegerArray、AtomicLongArray 和 AtomicReferenceArray。在并发环境下,数组的操作都是原子化。有趣的是,AtomicIntegerArray、AtomicLongArray 和 AtomicReferenceArray这三个原子类的实现基本一样,许多方法也和基本数据类型的原子类相似,因此也不作过多的解释。如果对基本数...

2019-06-19 14:04:55 271

原创 J.U.C 原子类系列之AtomicReference、AtomicStampedReference、AtomicMarkableReference

简介上一篇文章详细讲解了AtomicInteger原子类,还有和AtomicInteger原子类实现原理基本一样的AtomicLong和AtomicBoolean原子类。这些都是基本数据类型的原子类,在并发情景下可以保证基本数据类型变量的原子性。但是对于引用类型,这些基本类型的原子类就无能为力了,所以就出现对象引用类型的原子类。对象引用类型的原子类包括:AtomicReference、Atom...

2019-06-19 13:57:06 300

原创 J.U.C 原子类系列之AtomicIntegerFieldUpdater、AtomicLongFieldUpdater和AtomicReferenceFieldUpdater

之前写了几篇关于基本数据类型的原子类、数组类型的原子类和引用对象类型的原子类,重点介绍了AtomicInteger、AtmoicIntegerArray和AtomicStampedReference原子类。而接下来这篇文章,重点AtomicIntegerFieldUpdater、AtomicLongFieldUpdater和AtomicReferenceFieldUpdater原子类!简介At...

2019-06-19 13:44:13 554

原创 J.U.C 原子类系列之AtomicInteger 和 AtomicLong

简介在日常开发中,基本数据类型的原子类最常用的可能就是AtomicInteger类了。话说回来,为什么有Integer类还需要有AtomicInteger类呢?先来看看AtomicInteger类的包是啥:java.util.concurrent.atomic 。看到没有,这是并发包下的类,所以AtomicInteger类肯定是在并发环境下使用的。AtomicInteger原子类的使用先看一...

2019-06-19 11:46:15 760

原创 设计模式之访问者模式(Visitor Pattern)

What:提供一个作用于某对象结构中的各元素的操作表示,它使得可以在不改变各元素的类的前提下定义作用于这些元素的新操作。Why:优点:1.各角色职责分离,符合单一职责原则。2.扩展性好,如果需要新增操作方式,只需要在具体访问者增加方法,灵活性高。3.使得数据结构和作用于结构上的操作解耦,使得操作集合可以独立变化。缺点:1.具体元素对访问者公布细节,违反了迪米特原则。2.增加新...

2019-06-04 10:53:29 263

原创 设计模式之状态模式(State Pattern)

What:允许对象在内部状态发生改变时改变它的行为,对象看起来好像修改了它的类。Why:优点:1、封装了转换规则。2、枚举可能的状态,在枚举状态之前需要确定状态种类。3、将所有与某个状态有关的行为放到一个类中,并且可以方便地增加新的状态,只需要改变对象状态即可改变对象的行为。4、允许状态转换逻辑与状态对象合成一体,而不是某一个巨大的条件语句块。5、可以让多个环境对象共享一个状态...

2019-06-04 10:51:24 184

原创 设计模式之备忘录模式(Memento Pattern)

What:保存一个对象的某个状态,以便在适当的时候恢复对象。该模式又称快照模式。Why:优点:1.为用户提供一种可恢复的机制,方便用户操作历史回滚。2.封装存档的信息,用户不需知道信息的保存细节。缺点:因为需要保存信息,所以会导致资源占用,特别是保存大对象的时候,有可能出现oom。Where:1.提供一个可回滚的操作。2.需要保存/恢复数据的相关状态场景,譬如文字或图像的编...

2019-06-04 10:50:16 206

原创 设计模式系列

创建型模式:设计模式之工厂模式(Factory Pattern)设计模式之抽象工厂模式(Abstract Factory Pattern)设计模式之建造者模式(Builder Pattern)设计模式之原型模式(Prototype Pattern)设计模式之单例模式(Singleton Pattern)结构型模式:设计模式之适配器模式(Adapter Pattern)设计模式之桥接...

2019-06-04 10:42:56 881

原创 设计模式之责任链模式(Chain of Responsibility Pattern)

What:责任链模式也叫职责链模式。为了避免请求发送者与多个请求处理者耦合在一起,将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链;当有请求发生时,可将请求沿着这条链传递,直到有对象处理它为止。Why:优点:1.降低耦合度。它将请求的发送者和接收者解耦。2.增强给对象指派职责的灵活性。通过改变链内的成员或者调动它们的次序,允许动态地新增或者删除责任。缺点:1.责任...

2019-06-03 23:51:57 295

原创 设计模式之命令模式(Command Pattern)

What:将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开。这样两者之间通过命令对象进行沟通,这样方便将命令对象进行储存、传递、调用、增加与管理。Why:优点:1.降低了系统耦合度。2.新的命令可以很容易添加到系统中去。缺点:每个具体操作就需要设计一个具体的命令类,会导致系统有过多的具体命令类,增加系统的复杂性。Where:1.当系统需要将请求调用者与请求接收...

2019-06-03 22:54:11 245

原创 设计模式之外观模式(Facade Pattern)

What:外观模式(Facade),也被称为"门面模式"。定义了一个高层、统一的接口,外部通过这个统一的接口对子系统中的一群接口进行访问。Why:优点:1.简化调用流程,客户端不需要知道子系统的实现,提高了安全性,符合“迪特米原则”。2.提高灵活性,降低用户类和子系统类的耦合度,实现了松耦合。3.更好的划分访问层次。缺点:如果新增子系统,需要修改外观类,违背了“开闭原则”。...

2019-05-27 13:33:33 201

原创 设计模式之模版模式(Template Pattern)

What:定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重定义该算法的某些特定步骤。Why:优点:1.封装不变部分,扩展可变部分。2.提取公共代码,便于维护。3.行为由父类控制,子类实现,符合开闭原则。4.代码复用,减少代码冗余。缺点:1.每一个不同的实现都需要增加子类,导致类数目增加,增加类系统的复杂度;2.由于继承的关系,...

2019-05-27 13:32:32 148

原创 设计模式之解释器模式(Interpreter Pattern)

What:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。Why:优点:1.可扩展性比较好,灵活;2.增加新的解释表达式不需改动原有的代码,符合开闭原则;3.易于实现简单文法。缺点:1.当语法规则数目太多时,增加了系统的复杂度;2.解释器模式采用递归调用方法,执行效率低,调试困难;3.对于复杂的文法比较难维护;4.解释器模式...

2019-05-27 12:32:04 245

原创 设计模式之迭代器模式(Iterator Pattern)

What:提供一种方法顺序访问一个聚合对象中各个元素, 而又无须暴露该对象的内部表示。Why:优点:1.不需要暴露内部表示就可以访问聚合对象;2.支持不同方式遍历聚合对象;3.迭代器简化了聚合类;4.不需要改动原有的代码就可以很方便的增加新的聚合类和迭代器类,符合开闭原则。缺点:由于迭代器模式将存储数据和遍历数据的职责分离,增加新的聚合类需要对应增加新的迭代器类,类的个数成对...

2019-05-27 12:31:12 189

原创 设计模式之适配器模式(Adapter Pattern)

What:将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。Why:优点:1.客户端通过适配器可以透明地调用目标接口;2.复用了现存的类,不需要修改原有代码而重用现有的适配者类,符合开闭原则;3.将目标类和适配者类解耦,解决了目标类和适配者类接口不一致的问题;缺点:1.Java不支持多重继承,一次最多可以继承一个适配器类;2....

2019-05-27 12:30:05 262

原创 设计模式之抽象工厂模式(Abstract Factory Pattern)

What:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。Why:优点:1.当增加一个新的产品族时不需要修改原代码,满足开闭原则。2.可以在类的内部对产品族中相关联的多等级产品共同管理,而不必专门引入多个新的类来进行管理。3.当一个族中的多个对象被设计成一起工作时, 它能够保证客户端始终只使用同一个族中的对象。缺点:1.当产品等级中需要增加一个新的产品时,所...

2019-05-27 12:28:42 309

原创 设计模式之策略模式(Strategy Pattern)

What:策略是对算法的封装,是一种形为模式,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。Why:优点:1.扩展性良好;2.避免使用多重条件判断,遵循开闭原则;3.算法可以自由切换。缺点:1.所有策略类都需要对外暴露;2.策略类会增多。Where:1.一个系统需要在几种算法中动态地选择一种。2.系统很多类,而区别仅仅在于行为不同。...

2019-05-27 12:24:55 246

原创 设计模式之组合模式(Composite Pattern)

What:将对象组合成树形结构以表示“部分整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。组合模式又称为部分整体模式,该模式将对象组合成树形结构以表示"部分-整体"的层次结构。Why:优点:1、高层模块调用简单;2、节点自由增加。缺点:1.在使用组合模式时,其叶子和树枝的声明都是实现类,而不是接口,违反了依赖倒置原则;2.要求较高的抽象性,如果节点和叶子...

2019-05-26 01:04:33 327 2

原创 设计模式之装饰者模式(Decorator Pattern)

What:装饰者模式又名包装(Wrapper)模式。装饰者模式动态地将责任附加到对象身上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案。Why:优点:1.装饰者模式比继承灵活性,在不改变原有对象的情况下给对象扩展功能,符合开闭原则。继承关系是静态的,在编译的时候就已经决定了行为,不便于控制增加行为的方式和时机。2.装饰者模式可以动态使用不同的装饰类排列组合,创造出多样的行为组...

2019-05-26 01:03:42 232

原创 设计模式之观察者模式(Observer Pattern)

What:观察者模式又叫做发布-订阅模式,定义了对象间一对多的依赖关系,使得当对象状态发生变化时,所有依赖它的对象都会收到通知并且自动更新自己。Why:优点:1.观察者和被观察者是抽象耦合的;2.实现广播机制,被观察者可以群发消息给观察者。缺点:1.如果一个被观察者对象有很多的直接和间接的观察者的话,将所有的观察者都通知到会花费很多时间,影响执行效率。2.如果被观察者和观察者...

2019-05-26 01:02:50 218

原创 设计模式之桥接模式(Bridge Pattern)

What:将抽象部分与它的实现部分分离,使它们都可以独立地变化。Why:优点:1.抽象和实现的分离。2.优秀的扩展能力。3.实现细节对客户透明。缺点:1.增加了系统的理解和设计难度,由于聚合关联关系建立在抽象层,要求开发者针对抽象进行设计和编程。2.要求正确识别出系统中两个独立变化的维度,因此其使用范围有一定的局限性。Where:1.一个类存在两个独立变化的维度...

2019-05-26 01:01:52 223

原创 设计模式之建造者模式(Builder Pattern)

What:建造者模式是将一个复杂的对象的构建与表示分离,使得同样的构建过程可以创建不同的表示。建造者模式隐藏了复杂对象的创建过程,它把复杂对象的创建过程加以抽象,通过子类继承或者重载的方式,动态的创建具有复合属性的对象。Why:优点:1.遵循开闭原则。2.对象的建造和表示分离,实现了解耦。3.隐藏了对象的建造细节,用户只需关心产品的表示,而不需要了解是如何创建产品的。缺点:1....

2019-05-26 01:01:03 340

原创 设计模式之工厂模式(Factory Pattern)

What:工厂模式又称多态性工厂模式。定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。Where:1.创建对象需要大量重复代码;2.客户端不关心实例如何被创建、实现的细节;3.一个类通过子类来指定创建哪个对象。Why:优点:1.一个调用者想创建一个对象,只要知道其名称就可以了。2.扩展性高,如果想增加一个产品,只要扩展一个...

2019-05-26 01:00:02 569

原创 设计模式之原型模式(Prototype Pattern)

What?是用于创建重复的对象,同时又能保证性能的一种创建型模式。Why优点:1、性能提高。当创建新的对象比较复杂时,可以利用原型模式简化对象的创建过程,同时也能够提高效率。因为通过clone创建的一个对象比直接用new创建对象更有效率。2、逃避构造函数的约束。缺点:在实现深克隆的时候可能需要比较复杂的代码。需要为每一个类配备一个克隆方法,而且这个克隆方法需要对类的功能...

2019-05-26 00:58:04 522

原创 设计模式之代理模式(Proxy Pattern)

What:为其他对象提供一种代理以控制对这个对象的访问。Why:优点:1.增强目标对象。可以在执行目标对象方法的前后或者其他地方加上验证、日志等等代码;(Spring框架中的AOP)2.将调用对象和被调用对象分离,一定程度上降低了耦合度。扩展性好;3.保护目标对象;4.职责清晰。目标对象就是实现实际的业务逻辑,不用关心其他非本职责的事务,通过后期的代理完成,附带的结果就是编程简洁...

2019-05-26 00:55:59 245

原创 设计模式之享元模式(Flyweight Pattern)

What:使用共享的方式高效的支持大量的细粒度的对象。Why:优点:1.减少创建的对象数量,减少内存占用和提高性能;2.享元模式的外部状态相对独立,而且不会影响其内部状态,从而使得享元对象可以在不同的环境中被共享。缺点:1.享元模式使得系统更加复杂,需要分离出内部状态和外部状态,这使得程序的逻辑复杂化;2.为了使对象可以共享,享元模式需要将享元对象的状态外部化,而读取外部状态使...

2019-05-26 00:53:51 220

原创 设计模式之中介者模式(Mediator Pattern)

What:中介者模式使用一个中介对象来封装一系列对象的交互,从而使各对象不需要显式的相互引用,从而使得对象我们耦合松散,而且可以独立地改变对象之间的交互。该模式是用来降低多个对象和类之间的通信复杂性。Why:优点:1、降低了类的复杂度,将一对多转化成了一对一。2、各个类之间的解耦。3、符合迪米特原则。缺点:1.中介者会庞大,变得复杂难以维护。2.如果中介者类出现问题,将会导致所...

2019-05-26 00:52:13 181

原创 设计模式之单例模式(Singleton Pattern)

定义保证一个类只有一个实例,并提供全局访问点。使用场景要求生产唯一序列号。WEB 中的计数器,不用每次刷新都在数据库里加一次,用单例先缓存起来。创建的一个对象需要消耗的资源过多,比如 I/O 与数据库的连接等。懒汉模式 vs 饿汉模式懒汉模式:很懒。在调用的时候才会创建单例。(延迟加载)饿汉模式:很饿。在系统加载的时候就会创建单例。(预加载)懒汉模式饿汉模式...

2019-05-22 10:13:39 318

原创 多线程之并发类CountDownLatch、CyclicBarrier和Semaphor的使用

CountDownLatch并发类CountDownLatch是什么?CountDownLatch:一个或多个线程等待其他线程完成操作。什么情况下使用?某一个动作需要等待其它线程完成后才会触发。举个栗子,一个班上50个人,考完试之后需要计算全班同学的总成绩,这种情况使用CountDownLatch并发类就最合适了,每一个人的成绩等于一个线程,需要等待50个线程执行完之后才能执行最后...

2019-04-21 17:27:05 327

原创 多线程之ReentrantLock源码剖析

剖析ReentrantLock非公平锁和公平锁的源码ReentrantLock和synchronized一样是可重入锁。可重入锁,也叫做递归锁。指的是同一线程外层函数获得锁之后 ,内层递归函数仍然有获取该锁的代码,但不受影响。其最大作用是不会产生死锁。ReentrantLock与synchronized的区别与synchronized相比,ReentrantLock提供了更多,更加全...

2019-04-17 23:40:02 181

原创 多线程之线程安全性

多线程环境下使用非线程安全类会导致线程安全问题。线程安全问题表现为原子性,有序性,可见性在讲述线程安全三大特性之前,先了解CPU一些基本概念(寄存器,高速缓存,缓存一致性。关系图下面有~)。什么是寄存器?为什么寄存器比内存快?引用Wiki对寄存器的部分描述:寄存器(Register),是中央处理器内的其中组成部分。寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和地址。在中央...

2019-04-17 23:38:48 255

原创 System类的基本使用

System类的基本使用在刚开始学习Java的时候,我想每一个人都有写过System.out.println(“Hello World !”)吧!那为什么输入这行代码就能在控制台输出结果呢?System还有其它什么方法呢?接下来,我根据源码结合日常常用的System方法进行简单的剖析。System类中包含3个成员变量,分别代表标准输入流(in),标准输出流(out)和标准错误输出流(err)...

2019-04-14 23:33:31 620

原创 Runtime类的基本使用

Runtime的基本使用日常开发中,Runtime类并不常用,所以我对Runtime的基本使用并不了解,借此篇文章加深对Runtime类理解。Runtime类代表Java程序的运行时环境,每当一个JVM进程启动的时候都会存在一个Runtime对象,随着JVM的存在而存在的。但由于类Runtime的构造器是私有化的,所以不能实例化对象。Runtime类提供了一个静态方法getRuntime()返...

2019-04-14 23:31:21 445

空空如也

空空如也

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

TA关注的人

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