自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 ActiveMQ实战(2)—— Spring集成JMS链接ActiveMQ

基础知识参考下这篇文章:Spring JMS各组件详解pom.xml <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> ...

2018-04-18 19:15:24 360

原创 ActiveMQ实战(1)

下载安装,启动 以管理员身份运行activemq.bat, 另外InstallService.bat是以服务的形式安装 启动之后浏览器8161端口可以打开管理终端,初始的账号密码都为admin 示例程序队列模式生产者 运行之后的结果 消费者 当开启2个消费者的同时生产者生产消息,看一下结果: 两个Consumer...

2018-04-16 19:46:42 302

原创 Java File操作

import java.io.*;public class FileTest { public static void main(String[] args) { testCreateFile(); testFileConst(); testFileCreateV2(); testDeleteFile(); tes

2018-04-16 17:13:23 462

原创 java集合框架剖析(8)——Hashtable

##Hashtable继承结构: 们可以看出,HashTable不但继承了Dictionary,而且实现了Map、Cloneable和Serializable接口,所以HashTable也可以实例化。HashTable和hashMap不同,HashTable是线程安全的(等会我们在源码中就能看出)。接口 put方法中,首先检测value是否为null,如果为null则会抛出...

2018-04-03 16:37:01 415

原创 java并发(6)—— 线程池

合理利用线程池能够带来三个好处。 第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。 第二:提高响应速度。当任务到达时,任务可以不需要的等到线程创建就能立即执行。 第三:提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控。但是要做到合理的利用线程池,必须对其原理了如指掌。JD...

2018-04-02 17:18:19 295

原创 java并发(5)——ReadWriteLock、CountDownLatch、CyclicBarrier、 LockSupport

ReadWriteLockReadWriteLock是读写分离锁 示例:/** 读写锁对比普通锁,2秒和20秒的区别,性能就是其实就是读操作对写操作的比值 */public class ReadWriteLockDemo { private static Lock lock=new ReentrantLock(); private static Reentran...

2018-04-02 15:21:00 335

原创 java并发(4)——ReentrantLock,Condition,Semaphore

ReentrantLock在Synchronized优化以前,synchronized的性能是比ReenTrantLock差很多的,但是自从jdk1.6开始,Synchronized引入了偏向锁,轻量级锁(自旋锁)后,两者的性能就差不多了,在两种方法都可用的情况下,官方甚至建议使用synchronized,其实synchronized的优化我感觉就借鉴了ReenTrantLock中的CAS技术...

2018-04-01 23:46:48 1787

原创 java并发(3)——无锁

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

2018-04-01 20:51:21 233

原创 java集合框架剖析(7)——HashMap

HashMap不仅继承了AbstractMap,而且实现了Map、Cloneable和Serializable接口,所以HashMap也可以序列化。另外,HashMap是非同步的,但是我们可以通过Collections类的静态方法synchronizedMap获得线程安全的HashMap。即: 总览一下HashMap的主要接口: 存储结构 HashMap的底层主要是基于数...

2018-04-01 16:57:02 218

原创 Java集合框架剖析(6)——Map架构

Map继承结构: 从图中可以看出:Map是一个接口,Map中存储的内容是键值对(key-value)。为了方便,我们抽象出AbstractMap类来让其他类继承,该类实现了Map中的大部分API,其他Map的具体实现就可以通过直接继承AbatractMap类即可。SortedMap也是一个接口,它继承与Map接口。SortedMap中的内容与Map中的区别在于,它是有序的键值对,里...

2018-04-01 16:41:10 201

原创 Java集合框架剖析(5)----fail-fast机制

在JDK的Collection中我们时常会看到类似于这样的话:例如,ArrayList:注意,迭代器的快速失败行为无法得到保证,因为一般来说,不可能对是否出现不同步并发修改做出任何硬性保证。快速失败迭代器会尽最大努力抛出 ConcurrentModificationException。因此,为提高这类迭代器的正确性而编写一个依赖于此异常的程序是错误的做法:迭代器的快速失败行为应该仅用于检测...

2018-04-01 15:03:36 336

原创 Java集合框架剖析(4)——LinkedList

LinkedList是一个继承与AbatractSequentialList的双向链表。它也可以被当作堆栈、队列或双端队列进行操作。LinkedList实现了List接口,能对它进行队列操作。LinkedList实现了Deque接口,即能将LinkedList当作双端队列使用。LinkedList实现了java.io.Serializable接口,这意味着LinkedList支持序列化...

2018-03-30 19:13:45 252

原创 Java集合框架剖析(3)——ArrayList

ArrayList ArrayList继承了AbstractList,实现了List。它是一个数组队列,相当于动态数组。提供了相关的添加、删除、修改和遍历等功能。ArrayList实现了RandomAccess接口,即提供了随机访问功能。RandomAccess是java中用来被List实现,为List提供快速访问功能的。在ArrayList中,我们即可以通过元素的序号来快速获取元素对象...

2018-03-30 18:34:28 220

原创 Java集合框架剖析(2)——AbstractXXX模板类

上文Java集合框架剖析(1)分析了Collection上层的一些接口。为了方便,Java抽象出AbstractCollection类来让其他类继承,该类实现类Collection中的绝大部分方法。AbstractList和AbstractSet都继承与AbstractCollection,具体的List实现类继承与AbstractList,而Set的实现类则继承与AbstractSet。 ...

2018-03-30 15:42:35 393 1

原创 Java集合框架剖析(1)---Collection接口

Collection是一个接口,它主要的两个分支是List和Set。如下图所示: List和Set都是接口,它们继承于Collection。IterableIterable接口主要实现获取迭代器的功能: CollectionCollection是一个高度抽象的接口。包含了集合的基本操作:添加、删除、清空、遍历、是否为空、获取大小等。 Collection接...

2018-03-30 12:35:49 216

原创 Class装载系统

Class装载系统Class类型通常以文件的形式存在(当然,任何二进制流都可以是Class类型),只有被Java虚拟机装载的Class类型才能在程序中使用。系统加载Class类型可以分为加载、链接和初始化3个步骤。其中,链接又可以分为验证、准备和解析3个步骤。 类装载的条件Class只有在必须要使用的时候才会被装载,Java虚拟机不会无条件的装载Class类型。Java虚拟机规定...

2018-03-29 23:20:52 414

原创 Class文件结构

Class文件结构java的口号是write once run anywhere。由于有JVM,java是跨平台的(当然现在大部分语言都跨平台了,python,ruby,php)。另外一个重要的特性是JVM提供了跨语言的支持,理论上说无论使用何种语言编写的软件,都可以在任意平台上运行。而实现这一切的基础,就是统一的Class文件结构,它是异构语言和java虚拟机之间的重要桥梁。文件结构...

2018-03-28 21:28:13 153

原创 垃圾收集器与内存分配

垃圾收集器与内存分配串行回收器串行回收器是指使用单线程进行垃圾回收的回收器。串行回收器可以在新生代和老年代使用,根据作用于不同的对空间,分为新生代串行回收器和老年代串行回收器。新生代串行回收器串行回收器其实是实现最简单的,所以也是垃圾回收器中最古老的一种,是jdk中最基本的垃圾回收器之一。其主要有两个特点:它仅仅使用单线程进行垃圾回收 所以没有线程间切换的开销,效率...

2018-03-20 22:13:36 182

原创 GC的算法与种类

GC的算法与种类引用计数法引用计数器的实现很简单,对于一个对象A,只要有任何一个对象引用了A,则A的引用计数器就加1,当引用失效时,引用计数器就减1。只要对象A的引用计数器的值为0,则对象A就不可能再被使用。 【注】名词解释 可达对象:通过根对象进行引用搜索,最终可以到达的对象 不可达对象:通过根对象进行引用搜索,最终没有被引用到的对象引用计数法的问题引用和去引用伴随加法...

2018-03-19 22:04:47 684

原创 (4)Bean的加载

protected <T> T doGetBean( final String name, final Class<T> requiredType, final Object[] args, boolean typeCheckOnly) throws BeansException { final String beanN...

2018-03-19 18:52:27 226

原创 java虚拟机的基本结构

JVM启动流程 其中jvm.cfg是jvm的配置文件JVM基本结构PC寄存器每个线程拥有一个PC寄存器,在线程创建时创建,指向下一条指令的地址。如果是执行本地方法时,PC的值为undefined。想一下为什么jvm虚拟机只有一个寄存器——PC寄存器?因为JVM是软件虚拟,无法使用寄存器的硬件优势,所以JVM本就不存在真正意义上的寄存器。内存空间方法...

2018-03-18 22:35:17 872

原创 HandlerMapping

HandlerMapping在这个SpringMVC体系结构中有着举足轻重的地位,充当着url和Controller之间映射关系配置的角色。主要有三部分组成:HandlerMapping映射注册、根据url获取对应的处理器、拦截器注册。看下HandlerMapping的继承结构: 由图中可以看出HandlerMapping家族分两支,一支继承AbstractUrlHandlerMappi...

2018-03-11 20:45:04 459

原创 SpringMVC组件概览

这里要介绍的是DispatchServlet中直接初始化的九大组件 HandlerMapping HandlerMapping只有一个接口那就是getHandler DispatchServlet中查找Handler的方式是按顺序遍历所有的HandlerMapping,当找到一个HandlerMapping后立即停止查找并返回 HandlerAdapter Han...

2018-03-11 15:29:07 230

原创 SpringMVC处理请求

HttpServletBean 从HttpServletBean的结构中可知,其没有重写service,doXXX等处理请求方法,所以HttpServletBean没有具体处理请求FrameworkServlet FrameworkServlet重写了HttpServlet的这些方法 可以看到Service之中将除了PATCH方法的所有请求都集中到processReque...

2018-03-11 10:56:47 1372

原创 springMVC整体结构

整体结构先看下spring中DispatcherServlet的继承结构: HttpServlet是Servlet规范,HttpServletBean,FrameworkServlet,DispatchServlet是SpringMVC中的。 XXXAware在Spring中表示对XXX可以感知,通俗点解释就是:如果在某个类里面想要使用spring的一些东西,就可以通过...

2018-03-09 22:59:03 1860

原创 Servlet接口

ServletServlet是一套规范,按照这套规范写的代码就可以直接在java服务器上运行。 先看一下Servlet的继承结构: init方法在容器启动时被容器调用(当load-on-startup设置为负数或者不设置时会在servlet第一次用到时才被调用),只会调用一次; getServletConfig 获取配置; service用于处理一个请求; getServle...

2018-03-08 21:22:58 416

原创 FactoryBean

先要分辨BeanFactory 与 FactoryBean的区别, 两个名字很像,所以容易搞混 BeanFactory: 以Factory结尾,表示它是一个工厂类,是用于管理Bean的一个工厂 FactoryBean:以Bean结尾,表示它是一个Bean,不同于普通Bean的是:它是实现了FactoryBean接口的Bean,根据该Bean的Id从BeanFactory中获取的实际上是Fact...

2018-03-06 20:01:09 203

原创 (3)自定义标签的解析

可以先参考下自定义标签的使用 当Spring拿到一个元素时首先要做的是根据命名空间进行解析,如果是默认的命名空间,则使用parseDefaultElement方法进行元素解析,否则使用parseCustomElement方法进行解析。 主要的逻辑就是 获取标签的名称空间,通过名称空间选择解析的Handler,Handler调用Parser解析1.获取标签名称空间 获取标签名称空...

2018-03-02 15:58:51 1068

原创 自定义标签的使用

一共有5个步骤 1.创建一个需要扩展的组件(Bean) 2.定义一个xsd文件描述组件内容 3.创建一个文件,实现BeanDefinitionParser接口,用来解析xsd文件中的定义和组件定义 4.创建一个Handler文件,扩展自NamespaceHandlerSupport,目的是将组件注册到Spring容器 5.编写Spring.handlers和Spring.schemas文...

2018-03-02 15:55:43 224

原创 (2)默认标签的解析

默认标签的解析是在parseDefaultElement之中进行的 分别对4种不同标签做了不同处理,最为核心的是bean标签。 (1)BeanDefinitionHolder bdHolder = delegate.parseBeanDefinitionElement(ele); 委托BeanDefinitionDelegate类的parseBeanDefinitionElement...

2018-03-01 17:02:35 215

原创 Profile属性的使用

如果在开发时进行一些数据库测试,希望链接到一个测试的数据库,以避免对开发数据库的影响。   开发时的某些配置比如log4j日志的级别,和生产环境又有所区别。   各种此类的需求,让我希望有一个简单的切换开发环境的好办法。现在spring3.1也给我们带来了profile,可以方便快速的切换环境。   使用也是非常方便。只要在applicationContext.xml中添加下边的内容,就

2018-02-07 18:15:21 2147

原创 EntityResolver作用

EntityResolver是org.xml.sax包下的一个接口(InputSource也是) 1.1 何为 EntityResolver : 官方解释: 如果SAX应用程序实现自定义处理外部实体,则必须实现此接口, 并使用setEntityResolver方法向SAX 驱动器注册一个实例. 也就是说,对于解析一个xml,sax 首先会读取该xml文档上的声明,根据声明去寻找相应的

2018-02-07 17:57:01 5429 5

原创 XML的DTD,XSD验证

1.DTD(Documnet Type Definition) DTD即文档类型定义,是一种XML约束模式语言,是XML文件的验证机制,属于XML文件组成的一部分。 DTD 是一种保证XML文档格式正确的有效方法,可以通过比较XML文档和DTD文件来看文档是否符合规范,元素和标签使用是否正确。 一个 DTD文档包含:元素的定义规则,元素间关系的定义规则,元素可使用的属性,可使用的实体或符号规则

2018-02-07 17:28:14 778

原创 Spring对外部资源的处理

在日常程序开发中,处理外部资源是很繁琐的事情,我们可能需要处理URL资源、File资源资源、ClassPath相关资源、服务器相关资源(JBoss AS 5.x上的VFS资源)等等很多资源。因此处理这些资源需要使用不同的接口,这就增加了我们系统的复杂性;而且处理这些资源步骤都是类似的(打开资源、读取资源、关闭资源),因此如果能抽象出一个统一的接口来对这些底层资源进行统一访问,是不是很方便,而且使我

2018-02-07 16:57:09 566

原创 (1)容器的基本实现

定义一个Bean 在xml配置文件之中配置好 使用BeanFactory获取Bean 使用到了XmlBeanFactory,看XmlBeanFactory的类结构图 最上层是3个接口BeanFactory、SingletonBeanRegistry、AliasRegistry AliasRegistry:定义对Alias的简单增删改等操作 xml定义bean的时候...

2018-02-07 16:49:16 228

原创 InitializingBean

源码InitializingBean接口用于对bean进行初始化配置,实现方式是通过afterPropertiesSet方法,凡是继承该接口的类,在初始化bean的时候会执行afterPropertiesSet方法。测试结果这说明在spring初始化bean的时候,如果bean实现了InitializingBean接口,会自动调用afterPropertiesSet方法。在这之后才是: “Finis

2018-01-03 17:00:44 520

原创 JVM的基本结构

JVM的基本结构java虚拟机的基本结构如图:1)类加载子系统负责从文件系统或者网络中加载Class信息,加载的类信息存放于一块称为方法区的内存空间。除了类的信息外,方法区中可能还会存放运行时常量池信息,包括字符串字面量和数字常量(这部分常量信息是Class文件中常量池部分的内存映射)。2)java堆在虚拟机启动的时候建立,它是java程序最主要的内存工作区域。几乎所有的java对象实例都存放在ja

2017-11-08 18:59:17 1098

原创 java并发(2)——线程的基本操作

线程的基本操作新建线程java中建立线程可以有两种方式,分别是继承Thread类和实现Runnable接口。public static class CreateThread extends Thread{ @Override public void run() { System.out.println("Oh, I am CreateThread...

2017-11-07 11:03:57 318

原创 java并发(1)——JVM原子性、可见性、有序性

JVM原子性、可见性、有序性Java内存模型是围绕着并发过程中如何处理原子性、可见性、有序性这三个特征来建立的,下面是这三个特性的实现原理:原子性(Atomicity)原子性是指一个操作是不可中断的。即使是在多个线程一起执行的时候,一个操作一旦开始就不会被其他线程干扰。由Java内存模型来直接保证的原子性变量操作包括read、load、use、assign、store和writ...

2017-11-03 17:55:35 1321

转载 #python 线程,协程

本文转自:http://www.cnblogs.com/suoning/p/5599030.html线程Threading用于提供线程相关的操作。线程是应用程序中工作的最小单元,它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。threading 模块建立在 _thread 模块之上。thread 模块以低级

2017-02-14 15:18:59 460

空空如也

空空如也

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

TA关注的人

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