自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 多线程之八:并发调试和JDK8新特性

到了这章,多线程的介绍也到尾声了,最后介绍一下多线程在Eclipse中是怎么调试的,还有常见问题的解决方案。多线程调试的方法     使用Eclipse进行多线程调试         -条件断点                                以上示例断点会中断当前线程,不影响其他线程的继续执行。这种调试方法不仅限于调试多线程,对于一般的代码调试也很常用,例如断点循环体内的某一个对...

2018-05-21 14:42:03 1156

原创 多线程之七:锁优化

1.锁优化的思路和方法    1.1 减少锁持有时间                 如果需要同步的代码只是其中小部分,最好用同步块代替同步方法,并且尽可能减少同步块里的代码量。     1.2减小锁粒度     将大对象,拆成小对象,大大增加并行度,降低锁竞争      偏向锁,轻量级锁成功率提高         ConcurrentHashMap的实现             –...

2018-05-21 14:21:49 291

原创 多线程之六:并发设计模式

什么是设计模式     在软件工程中,设计模式(design pattern)是对软件设计中普遍存在(反复出现)的各种问题 ,所提出的解决方案。     架构模式 – MVC – 分层    设计模式 – 提炼系统中的组件    代码模式(成例 Idiom)         – 低层次,与编码直接相关        – 如DCL不变模式     一个类的内部状态创建后,在整个生命期间都不会发生变化...

2018-05-21 12:56:38 390

原创 多线程之五:线程池

1.线程池的基本使用    1.1. 为什么需要线程池         假设一个服务器完成一项任务所需时间为:T1 创建线程时间,T2 在线程中执行任务的时间,T3 销毁线程时间。 如果:T1 + T3 远大于 T2,则可以采用线程池,以提高服务器性能。         1.1.1. 假设一个服务器完成一项任务所需时间为:T1 创建线程时间,T2 在线程中执行任务的时间,T3 销毁线程时间, T1...

2018-05-21 12:42:20 242

原创 多线程之四:无锁的简单介绍

1. 无锁类的原理详解     1.1.CAS         CAS算法的过程是这样:它包含3个参数CAS(V,E,N)。V表示要更新的变量,E表示预期值,N表示新值。仅当V 值等于E值时,才会将V的值设为N,如果V值和E值不同,则说明已经有其他线程做了更新,则当前线程什么 都不做。最后,CAS返回当前V的真实值。CAS操作是抱着乐观的态度进行的,它总是认为自己可以成功完成 操作。当多个线程同时...

2018-05-21 01:53:03 738

原创 多线程之三:JDK并发包

1. 各种同步控制工具的使用     1.1.ReentrantLock         1.1.1. 可重入 单线程可以重复进入,但要重复退出        1.1.2. 可中断 lockInterruptibly()        1.1.3. 可限时 超时不能获得锁,就返回false,不会永久等待构成死锁        1.1.4. 公平锁 先来先得 (相对不公平锁,线程调度的效率会差点) ...

2018-05-21 01:47:25 275

原创 多线程之二:线程安全

1.线程安全是什么:    指某个函数、函数库在多线程环境中被调用时,能够正确地处理各个线程的局部变量,使程序功 能正确完成。 2.内存模型    – 每一个线程有一个工作内存和主存独立    – 工作内存存放主存中变量的值的拷贝           当数据从主内存复制到工作存储时,必须出现两个动作:第一,由主内存执行的读(read)操作;第二,由工作内存执行的相应的load操作;当数据从工作内...

2018-05-21 01:31:51 216

原创 多线程之一:多線程基礎

在前面我们介绍了JVM,在此基础上,我们可以进一步更好的了解多线程。接下来,我将会写一系列多线程的那些事,这些都是我对多线程的一个小总结,希望对大家学习和深入多线程带来帮助。为什么需要并行:– 业务要求 – 性能– 并行计算还出于业务模型的需要 并不是为了提高系统性能,而是确实在业务上需要多个执行单元。比如HTTP服务器,为每一个Socket连接新建一个处理线程让不同线程承担不同的业务工作 简化任...

2018-05-21 01:21:14 203

原创 JVM系列之七:字节码执行

Javap– class文件反汇编工具– javap –verbose Calcjava 文件public class Calc { public int calc() { int a = 500; int b = 200; int c = 50; return (a + b) / c; }}编译后Class文件public int calc();  Code:   Stack=2, Lo...

2018-05-07 00:07:48 161

原创 JVM系列之六:堆分析

内存溢出(OOM)的原因– 在JVM中,有哪些内存区间?堆永久区Java栈直接内存– 堆溢出public static void main(String args[]){ ArrayList<byte[]> list=new ArrayList<byte[]>(); for(int i=0;i<1024;i++){ list.ad...

2018-05-07 00:02:41 185

原创 JVM系列之五:性能监控工具

工欲善其事,必先利其器。这期我们来介绍常用的性能监控工具,用于性能监控和问题排查。在最后我们再分析一下堆,讲解一下内存溢出的原因。 系统性能监控Linux– uptime • 系统时间• 运行时间n 例子中为7分钟• 连接数n 每一个终端算一个连接• 1,5,15分钟内的系统平均负载n 运行队列中的平均进程数 – Top • 第一行同uptime• 第三行到第五行是CPU和内存的使用情况• 图中下...

2018-05-06 23:58:33 169

原创 JVM系列之四:类装载器

class装载验证流程加载– 装载类的第一个阶段– 取得类的二进制流– 转为方法区数据结构– 在Java堆中生成对应的java.lang.Class对象链接– 验证· 目的:保证Class流的格式是正确的· 文件格式的验证· 是否以0xCAFEBABE开头· 版本号是否合理· 元数据验证· 是否有父类· 继承了final类?· 非抽象类实现了所有的抽象方法· 字节码验证 (很复杂)· 运行检查· ...

2018-05-06 23:45:13 157

原创 JVM系列之三:常用JVM配置参数

GC参数串行收集器– 最古老,最稳定– 效率高– 可能会产生较长的停顿– 新生代、老年代使用串行回收– 新生代复制算法– 老年代标记-压缩– -XX:+UseSerialGC 并行收集器– 新生代复制算法,老年代标记-压缩– -XX:+UseParNewGC– Serial收集器新生代的并行版本– 只会影响新生代– 可以和CMS算法一起使用– -XX:+UseParallelGC– ParNew是...

2018-05-06 23:39:26 291

原创 JVM系列之二:GC算法与原理

这节我们介绍GC的算法。GC的概念    Garbage Collection 垃圾收集    Java中,GC的对象是堆空间和永久区 GC算法    引用计数法        没有被Java采用        引用计数器的实现很简单,对于一个对象A,只要有任何一个对象引用了A,则A的引用计数器就加1,当引用失效时,引用计数器就减1。只要对象A的引用计数器的值为0,则对象A就不可能再被使用。   ...

2018-03-02 00:09:29 267

原创 JVM系列之一:基础

    今天开始,我们来讲下JVM。一个好的工程,除了代码优化之外,还需要有一个优化的运行环境,我们通过JVM系列来了解JVM和常用的优化手段。JVM的概念    JVM是Java Virtual Machine的简称,意为Java虚拟机。JVM使用软件模拟Java 字节码的指令集虚拟机    指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统有哪些虚拟机  VMWa...

2018-03-01 23:42:24 237

原创 java开发模式之总结篇

什么是设计模式模式:在某些场景下,针对某类问题的某种通用解决方案场景:项目环境问题:约束条件,项目目标等解决方案:通用、可以复用的设计,解决约束,达到目标设计模式的三个分类创建型模式:对象实例化的模式,创建型模式解耦了对象的实例化过程 结构型模式:把类或对象结合在一起形成更大的结构 行为型模式:类和对象如何交互,及划分责任和算法 各分类中模式的关键点

2017-12-25 23:50:25 248

原创 java 开发模式之二十三:访问者模式

原理或定義访问者模式是对象的行为模式。封装某些作用于某种数据结构中各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作。结构抽象访问者:抽象类或者接口,声明访问者可以访问哪些元素,具体到程序中就是visit方法中的参数定义哪些对象是可以被访问的。访问者:实现抽象访问者所声明的方法,它影响到访问者访问到一个类后该干什么,要做什么事情。抽象元素类:接口或者抽象类

2017-12-25 10:41:23 209

原创 java 开发模式之二十二:原型模式

原理或定義通过一个已经存在的对象,复制出更多的具有与此对象具有相同类型的新的对象。结构1. 客户(Client)角色:客户类提出创建对象的请求。2. 抽象原型(Prototype)角色:这是一个抽象角色,通常由一个Java接口或Java抽象类实现。此角色给出所有的具体原型类所需的接口。3. 具体原型(Concrete Prototype)角色:被复制的对象。此角色需要实现抽象的

2017-12-25 10:25:32 254

原创 java 开发模式之二十一:备忘录模式

原理或定義备忘录对象是一个用来存储另外一个对象内部状态的快照的对象。备忘录模式的用意是在不破坏封装的条件下,将一个对象的状态捕捉(Capture)住,并外部化,存储起来,从而可以在将来合适的时候把这个对象还原到存储起来的状态。备忘录模式常常与命令模式和迭代子模式一同使用。是对象的行为模式。结构发起人(Originator):创建一个含有当前的内部状态的备忘录对象,使用备忘录对象存储其内

2017-12-25 00:05:27 193

原创 java 开发模式之二十 :中介者模式

原理或定義用一个中介者对象来封装一系列的对象交互。中介者使得各对象不需要显式地相互引用,从而使其松散耦合,而且可以独立地改变它们之间的交互。结构Mediator:中介者接口。在里面定义了各个同事之间相互交互所需要的方法,可以是公共的方法,如Change方法,也可以是小范围的交互方法。ConcreteMediator:具体的中介者实现对象。它需要了解并为维护每个同事对象,并负责具体的

2017-12-24 23:37:26 287

原创 java 开发模式之十九 :解析器模式

原理或定義给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。属于行为类模式结构AbstractExpression:声明一个抽象的Interpret方法,抽象语法树中所有的节点都必须实现该抽象方法。TerminalExpression:-实现和语法中末端符号相关的Interpret方法。在每个句子的末端符号中均需要一个TerminalE

2017-12-24 23:32:25 1070

原创 java 开发模式之十八 :蝇量模式(享元模式)

原理或定義能做到共享的关键是区分内蕴状态(Internal State)和外蕴状态(External State).一个内蕴状态是存储在享元对象内部的,并且不会随环境改变而有所不同.因此,一个享元可以具有内蕴状态并可以共享 .一个外蕴状态是随环境改变而改变的,不可以共享状态.享元对象的外蕴状态必须由客户端保存, 并在享元对象被创建之后, 在需要使用的时候再传到享元对象内部.单纯享元模式

2017-12-24 23:07:45 329

原创 java 开发模式之十七 :责任链模式

原理或定義是一种对象的行为模式。在职责链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织链和分配责任。结构抽象处理者(Handler)角色:定义出一个处理请求的接口。如果需要,接口可以定义出一个方法,以设

2017-12-24 22:45:17 237

原创 java 开发模式之十六 : 生成器模式

原理或定義将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。结构Builder:生成器接口,定义创建一个Product对象所需要的各个部件的操作。ConcreteBuilder:具体的生成器实现,实现各个部件的创建,并负责组装Product对象的各个部件,同时还提供一个让用户获取组装完成后的产品对象的方法。Director:指导者,也被称导向者,主要用来

2017-12-24 20:01:35 208

原创 java 开发模式之十五 : 桥接模式

原理或定義把抽象部分和它的实现部分分离开来,让两者可独立变化。这里的抽象部分指的是一个概念层次上的东西,它的实现部分指的是实现这个东西的(功能)部分,分离就把实现部分从它要实现的抽象部分独立出来,自我封装成对象。结构抽象化(Abstraction)角色:抽象化给出的定义,并保存一个对实现化对象的引用。修正抽象化(Refined Abstraction)角色:扩展抽象化角色,改变和修

2017-12-24 19:37:05 190

原创 java 开发模式之十四 : 复合模式

原理或定義复合模式结合两个或以上的模式,组成一个解决方案,解决一再发生的一般性问题。经典应用:MVC(Android) MVC是经典复合模式,结合了观察者模式、组合模式和策略模式。(1)Model(模型)使用观察者模式,以便自己状态改变时通知观察者更新,同时保持两者之间的解耦(2)Control(控制器)是视图的策略,视图可以使用不同的控制器得到不同的行为。

2017-12-24 19:35:02 213

原创 java 开发模式之十三 : 代理模式

原理或定義提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.这样做的好处是: 可以在目标对象实现的基础上, 增强额外的功能操作, 即扩展目标对象的功能。代理模式又分为静态代理和动态代理。静态代理是由程序猿创建或特定工具自动生成源代码,再对其编译。在程序运行前,代理类的.class文件就已经存在了。动态代理是在程序运行时,通过运用反射机制动态的创建而成。结构抽象角色:声明真

2017-12-24 12:39:17 253

原创 java 开发模式之十二 : 状态模式

原理或定義当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。状态模式中的行为是由状态来决定的,不同的状态对应了不同的行为。结构环境类Context: 它定义了客户程序需要的接口并维护一个具体状态角色的实例,将与状态相关的操作委托给当前的Concrete State对象来处理;抽象状态类State: 定义一个接口以封装与Context的一个特定状态相关的

2017-12-24 12:10:01 243

原创 java 开发模式之十一 : 組合模式

原理或定義组合模式又叫做部分-整体模式,它使我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以向处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解藕。结构Component: 为参加组合的对象声明一个公共接口,不管是组合还是叶结点.Leaf: 在组合中表示叶子结点对象, 叶子结点没有子结点.Composite: 表示参加组合的有子对象的对

2017-12-24 11:44:17 168

原创 java 开发模式之十 : 迭代器模式

原理或定義迭代器模式又叫做游标(Cursor)模式。GOF给出的定义:提供一种方法访问一个容器(container)对象中的各个元素,而又不暴露该对象的内部细节。结构迭代器角色(Iterator):负责定义访问和遍历元素的接口。具体迭代器角色(Concrete Iterator):实现迭代器接口,并要记录遍历中的当前位置。容器角色(Aggregate):  负责提供创建

2017-12-24 11:03:20 195

原创 java 开发模式之九 : 模板方法模式

原理或定義定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。结构抽象模板(Abstract Template):定义了一个或多个抽象操作,以便让子类实现。具体模板(Concrete Template):实现父类所定义的一个或多个抽象方法抽象模板中方法的定義基本方法: 也叫做基本操作,由子类实现的

2017-12-24 10:25:25 425

原创 java 开发模式之八 : 外观模式(门面模式)

原理或定義它隐藏系统的复杂性,并向客户端提供一个可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性,为子系统中的一组接口提供了一个统一的高层访问接口,这个接口使得子系统更容易被访问或使用。这种模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用。结构门面角色( facade ):这是门面模式的核心。它被

2017-12-24 01:08:04 210

原创 java 开发模式之七 : 适配器模式

原理或定義适配器就是一种适配中间件,它存在于不匹配的二者之间,用于连接二者,将不匹配变得匹配,简单点理解就是平常所见的转接头,转换器之类的存在。将一类的接口转换成客户希望的另外一个接口,Adapter模式使得原本由于接口不兼容而不能一起工作那些类可以一起工作。结构目标接口(Target): 客户所期待的接口。目标可以是具体的或抽象的类,也可以是接口。需要适配的类(Adapt

2017-12-24 00:51:52 229

原创 java 开发模式之六 : 命令模式

原理或定義命令模式将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。命令模式的本质是对命令进行封装,将发出命令的责任和执行命令的责任分割开,实现二者之间的松耦合。结构Command: 定义命令的接口,声明执行的方法。ConcreteCommand: 命令接口实现对象,通常会持有接受者,并调用接受者的功能来完成命令要

2017-12-24 00:32:26 201

原创 java 开发模式之五 : 工厂模式

原理或定義简单工厂模式:是由一个工厂对象决定创建出哪一种产品类的实例。是最简单实用的模式。工厂方法模式:在工厂方法模式中,核心的工厂类不再负责所有的产品的创建,而是将具体创建的工作交给子类去做。该核心类成为一个抽象工厂角色,仅负责给出具体工厂子类必须实现的接口,而不接触哪一个产品类应当被实例化这种细节。抽象工厂模式:为创建一组相关或相互依赖的对象提供一个接口,无需指定他们的具体类。

2017-12-24 00:06:58 273

原创 java 开发模式之四 : 单例模式

原理或定義一个类能返回对象一个引用(永远是同一个)和一个获得该实例的方法(必须是静态方法,通常使用getInstance这个名 称);当我们调用这个方法时,如果类持有的引用不为空就返回这个引用,如果类保持的引用为空就创建该类的实例并将实例的引用赋予该类保持的引用;同时我们 还将该类的构造函数定义为私有方法,这样其他处的代码就无法通过调用该类的构造函数来实例化该类的对象,只有通过该类提供的静

2017-12-23 23:41:50 192

原创 java 开发模式之三 : 装饰者模式

原理或定義动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。在不必改变原类文件和使用继承的情况下,动态的扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。特点或结构1) 装饰对象和真实对象有相同的接口,这样客户端对象就可以和真实对象相同的方式和装饰对象交互。2)装饰对象包含一个真实对象的引用。3)装饰对象接受所有来自客户

2017-12-23 23:20:13 248

原创 java 开发模式之二 : 观察者模式

原理或定義定义了对象间的一种一对多依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并被自动更新。结构观察者Observer:所有潜在的观察者必须实现观察者接口,这个接口只有update方法,当主题改变时,它被调用。具体观察者ConcreteObserver: 具体观察者可以是任何实现了Observer接口的类。观察者必须注册具体主题,一边接收更新。可观察

2017-12-23 23:07:00 183

原创 java 开发模式之一 : 策略模式

原理或定義定义一组算法,将每个算法都封装起来,并且使他们之间可以互换。结构封装类:也叫上下文,对策略进行二次封装,目的是避免高层模块对策略的直接调用。 抽象策略:通常情况下为一个接口,当各个实现类中存在着重复的逻辑时,则使用象类来封装这部分公共的代码,此时,策略模式看上去更像是模版方法模式。 具体策略:具体策略角色通常由一组封装了算法的类来担任,这些类之间可以根据需要自

2017-12-23 22:29:34 595

空空如也

空空如也

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

TA关注的人

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