- 博客(21)
- 资源 (17)
- 收藏
- 关注
原创 Java NIO 概述
Java NIO提供了与标准IO不同的IO工作方式: Channels and Buffers(通道和缓冲区):标准的IO基于字节流和字符流进行操作的,而NIO是基于通道(Channel)和缓冲区(Buffer)进行操作,数据总是从通道读取到缓冲区中,或者从缓冲区写入到通道中。Asynchronous IO(异步IO):Java NIO可以让你异步的使用IO,例如:当线程从通道读取数据到缓冲区时,...
2018-03-26 20:35:07 265
原创 java内存分配策略
JVM采用分代的垃圾回收策略:不同对象的生命周期是不一样的。目前JVM分代主要是分三个年代:新生代:所有新创建的对象都首先在新生代进行内存分配。新生代具体又分为3个区,一个Eden区、一个From Survivor区和一个To Sruvivor区。大部分对象都被分配在Eden区,当Eden区满时,还存活的对象将被复制到From Survivor区,当From Survivor区满时,此区还存活的对...
2018-03-19 17:21:06 1368 1
原创 java垃圾收集器
堆中几乎存放着Java世界中所有的对象实例,垃圾收集器在对堆进行回收前首先要确定哪些对象还活着,哪些对象已经死去。1,判断对象是否已死1.1引用计数算法给对象中添加一个引用计数器,每当有一个地方引用它时,计数器就加1,当引用失效时,计数器就减1;任何时刻计数器都为0的对象是不可能在被使用的。引用计数算法无法对象之间循环引用的问题。1.2 根搜索算法通过一系列名为“GC Roots”的对象作为起始点...
2018-03-18 22:50:20 3625 1
原创 Java并发编程指南(七):定制并发类
1,定制ThreadPoolExecutor类执行者框架(Executor framework)是一种机制,允许你将线程的创建与执行分离。它是基于Executor和ExecutorService接口及其实现这两个接口的ThreadPoolExecutor类。它有一个内部的线程池和提供允许你提交两种任务给线程池执行的方法。这些任务是:Runnable接口,实现没有返回结果的任务Callable接口,...
2018-03-17 13:33:27 214
原创 Java并发编程指南(六):并发集合
1. 非阻塞线程安全的列表 ConcurrentLinkedDeque并发列表允许不同的线程在同一时刻对列表的元素进行添加add()或删除pollFirst(),pollLast(),而不会产生任何数据不一致(问题)。add(), addFirst(), addLast(): 这些方法允许在列表的头部或者尾部插入一个元素。如果没有可用空间将会抛出异常。poll(), pollFirst()和pol...
2018-03-15 17:41:19 302
原创 Java并发编程指南(五):Fork/Join框架
这个框架被设计用来解决可以使用分而治之技术将任务分解成更小的问题。在一个任务中,检查你想要解决问题的大小,如果它大于一个既定的大小,把它分解成更小的任务,然后用这个框架来执行。这个框架基于以下两种操作:fork操作:当你把任务分成更小的任务和使用这个框架执行它们。join操作:当一个任务等待它创建的任务的结束。work-stealing算法:当一个任务正在等待它使用join操作创建的子任务的结 束...
2018-03-14 19:25:29 262
原创 Java并发编程指南(四):线程执行者
1. 创建一个线程执行者:使用Executor framework的第一步就是创建一个ThreadPoolExecutor类的对象。你可以使用这个类提供的4个构造器或Executors工厂类来 创建ThreadPoolExecutor。有了执行者,你就可以提交Runnable或Callable对象给执行者来执行。一个模拟web服务器的示例:// 1.首先,实现能被服务器执行的任务。创建实现Runn...
2018-03-12 17:42:16 285
原创 Java并发编程指南(三):线程同步工具
1. 控制并发访问资源Semaphore:Semaphore是一个控制访问多个共享资源的计数器。当一个线程想要访问某个共享资源,首先,它必须获得semaphore。如果semaphore的内部计数器的值大于0,那么semaphore减少计数器的值并允许访问共享的资源。计数器的值大于0表示,有可以自由使用的资源,所以线程可以访问并使用它们。另一种情况,如果semaphore的计数器的值等于0,那么s...
2018-03-12 11:21:13 210
原创 Java并发编程指南(二):基本线程同步
1. 同步方法:synchronized关键字:只有一个执行线程将会访问一个对象中被synchronized关键字声明的方法。如果另一个线程试图访问同一个对象中任何被synchronized关键字声明的方法,它将被暂停,直到第一个线程结束方法的执行。换句话说,每个方法声明为synchronized关键字是一个临界区,Java只允许一个对象执行其中的一个临界区。静态方法有不同的行为。只有一个执行线程...
2018-03-11 22:52:53 171
原创 Java并发编程指南(一):线程管理
1. 线程的创建和运行:在Java中,我们有2个方式创建线程:通过直接继承Thread类,然后覆盖run()方法。构建一个实现Runnable接口的类, 然后创建一个thread类对象并传递Runnable对象作为构造参数2.获取和设置线程信息:Thread类的对象中保存了一些属性信息能够帮助我们来辨别每一个线程,知道它的状态,调整控制其优先级。 这些属性是:ID: 每个线程的独特标识。Name:...
2018-03-11 14:55:47 241
原创 单例模式的六种写法
基本的实现思路单例模式要求类能够有返回对象一个引用(永远是同一个)和一个获得该实例的方法(必须是静态方法,通常使用getInstance这个名称)。单例的实现主要是通过以下两个步骤:将该类的构造方法定义为私有方法,这样其他处的代码就无法通过调用该类的构造方法来实例化该类的对象,只有通过该类提供的静态方法来得到该类的唯一实例;在该类内提供一个静态方法,当我们调用这个方法时,如果类持有的引用不为空就返...
2018-03-07 18:36:10 362
原创 Java内存模型:volatile关键字深度解析
volatile关键字保证1.可见性和2.一定的有序性,不保证原子性。volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,volatile关键字才得以重获生机。volatile关键字虽然从字面上理解起来比较简单,但是要用好不是一件容易的事情。由于volatile关键字是与...
2018-03-07 18:24:47 286 1
原创 Java 8 Optional类深度解析
Optional类包含的方法:of为非null的值创建一个Optional。of方法通过工厂方法创建Optional类。需要注意的是,创建对象时传入的参数不能为null。如果传入参数为null,则抛出NullPointerException 。//调用工厂方法创建Optional实例Optional<String> name = Optional.of("Sanaulla");//...
2018-03-06 19:22:44 3624 1
原创 java多线程编程基础
一、进程和线程的区别: 进程:每个进程都有独立的代码和数据空间(进程上下文),进程间的切换会有较大的开销,一个进程包含1--n个线程。(进程是资源分配的最小单位) 线程:同一类线程共享代码和数据空间,每个线程有独立的运行栈和程序计数器(PC),线程切换开销小。(线程是cpu调度的最小单位)线程和进程一样分为五个阶段:创建、就绪、运行、阻塞、终止。 多进程是指操作系统能同时运行多个任务(程序)...
2018-03-05 21:05:26 226
原创 调停者模式
调停者模式定义:用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。将网状调用关系变成星调用关系。将多对多的关系化解成一对多的关系。类图:源代码:/** * 职员接口 */abstract class Employee { String name; private Mediator mediator;...
2018-03-04 20:37:42 214
原创 迭代器模式
迭代器模式定义:迭代器模式(Iterator),提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示。类图:Talk is cheap, show me the code:interface Iterator<T> { public boolean hasNext(); public T next();}class ConcreteItera...
2018-03-03 23:50:51 146
原创 命令模式
将请求封装成命令对象,请求的具体执行由命令接收者执行;命令发送者与命令执行者解耦;可扩展命令模式:对请求排队或者记录请求日志,以及支持可撤销的操作;每一个命令都是一个操作:请求的一方发出请求,要求执行一个操作;接收的一方收到请求,并执行操作。一个开关灯例子,客户端发送开关灯命令,命令调用者负责调用调用执行命令;抽象命令:public interface Command { public v...
2018-03-02 15:41:14 118
原创 职责链模式
一、职责链模式介绍职责链模式:将能够处理同一类请求的对象连成一条链,使这些对象都有机会处理请求,所提交的请求沿着链传递。从而避免请求的发送者和接受者之间的耦合关系。链上的对象逐个判断是否有能力处理该请求,如果能则就处理,如果不能,则传给链上的下一个对象。直到有一个对象处理它为止。场景:1、打牌时,轮流出牌2、接力赛跑3、请假审批4、公文审批职责链UML图:Handler:表示处理请求的接口,在这个...
2018-03-02 15:14:19 193
原创 享元模式
享元模式通过共享避免大量相同对象的开销。简单说就是共享对象。结构图源代码public interface Flyweight { //一个示意性方法,参数state是外蕴状态 public void operation(String state);}public class ConcreteFlyweight implements Flyweight { privat...
2018-03-01 19:18:01 174
原创 桥接模式,组合模式、门面模式
一、桥接模式桥接模式的定义:将抽象化(Abstraction)与实现化(Implementation)脱耦,使得二者可以独立地变化。桥接模式结构图:桥接模式中得角色:抽象化(Abstraction)角色:抽象化给出的定义,并保存一个对实现化对象的引用。修正抽象化(Refined Abstraction)角色:扩展抽象化角色,改变和修正父类对抽象化的定义。实现化(Implementor)角色:这个角...
2018-03-01 17:13:16 1546
rabbitmq-server-3.8.1.rar
2019-11-17
ORACLE驱动jar包
2012-03-12
Pro JavaScript Design Patterns.pdf
2010-05-14
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人