自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 Spring—ContextRefreshedEvent

在开发时有时候需要在整个应用开始运行时执行一些特定代码,比如初始化环境,准备测试数据、加载一些数据到内存等等。在Spring中可以通过ApplicationListener来实现相关的功能,加载完成后触发contextrefreshedevent事件(上下文件刷新事件) Java代码  "testContextRefreshedEvent" clas

2017-11-23 11:01:52 975

转载 Spring—加载顺序

问题来源:有一个bean为A,一个bean为B。想要A在容器实例化的时候的一个属性name赋值为B的一个方法funB的返回值。如果只是在A里单纯的写着:private B b;private String name = b.funb();会报错说nullpointException,因为这个时候b还没被set进来,所以为null。解决办法为如下代码,同时

2017-11-23 10:41:21 637

转载 Spring—BeanNameAware、BeanFactoryAware

迄今为止,所接触到的Bean都是“无知觉”的,就像黑客帝国中机械工厂里面“养殖”的人类,他们虽然能完成一定的功能,但是根本不知道自己在工厂(BeanFactory)中的代号(id),或者自己是在哪个工厂(BeanFactory的引用)中沉睡。所以,本节的目的就是要创造出一个尼奥一样的Bean,让他知道自己在工厂中的id和自己原来躺在哪个工厂中。这里,称之为,Bean对Spring有知觉。但是有

2017-11-23 10:21:32 562

转载 Spring—ApplicationListener

使用场景在一些业务场景中,当容器初始化完成之后,需要处理一些操作,比如一些数据的加载、初始化缓存、特定任务的注册等等。这个时候我们就可以使用Spring提供的ApplicationListener来进行操作。用法本文以在Spring boot下的使用为例来进行说明。首先,需要实现ApplicationListener接口并实现onApplicationEvent方法。把

2017-11-22 18:41:55 234

转载 Spring—ApplicationContextAware

项目用到了ApplicationContextAware,通过它Spring容器会自动把上下文环境对象调用ApplicationContextAware接口中的setApplicationContext方法。我们在ApplicationContextAware的实现类中,就可以通过这个上下文环境对象得到Spring容器中的Bean。使用方法如下:1.实现Applicatio

2017-11-22 18:26:03 186

转载 Spring—DisposableBean

在java的实际开发过程中,我们可能常常需要使用到init method和destroy method,比如初始化一个对象(bean)后立即初始化(加载)一些数据,在销毁一个对象之前进行垃圾回收等等。 周末对这两个方法进行了一点学习和整理,倒也不是专门为了这两个方法,而是在巩固spring相关知识的时候提到了,然后感觉自己并不是很熟悉这个,便好好的了解一下。 根据特意的去了解后,发现实际上

2017-11-22 18:17:34 21479 1

转载 Spring—InitializingBean

spring中InitializingBean接口使用理解InitializingBean接口为bean提供了初始化方法的方式,它只包括afterPropertiesSet方法,凡是继承该接口的类,在初始化bean的时候会执行该方法。测试程序如下:12345678910

2017-11-22 15:40:23 149

转载 jetty手册(官网翻译)

http://www.cnblogs.com/yiwangzhibujian/p/5832294.htmlhttp://www.cnblogs.com/yiwangzhibujian/p/5832597.htmlhttp://www.cnblogs.com/yiwangzhibujian/p/5845623.htmlhttp://www.cnblog

2017-11-06 17:19:30 451

转载 Java内存模型

Java内存模型规范了Java虚拟机与计算机内存是如何协同工作的。Java虚拟机是一个完整的计算机的一个模型,因此这个模型自然也包含一个内存模型——又称为Java内存模型。如果你想设计表现良好的并发程序,理解Java内存模型是非常重要的。Java内存模型规定了如何和何时可以看到由其他线程修改过后的共享变量的值,以及在必须时如何同步的访问共享变量。原始的Java内存模型存在一些不足,

2017-08-13 14:30:59 156

转载 线程安全及不可变性

当多个线程同时访问同一个资源,并且其中的一个或者多个线程对这个资源进行了写操作,才会产生竞态条件。多个线程同时读同一个资源不会产生竞态条件。我们可以通过创建不可变的共享对象来保证对象在线程间共享时不会被修改,从而实现线程安全。如下示例:01public class ImmutableValue{02

2017-08-13 14:25:30 186

转载 线程安全与共享资源

允许被多个线程同时执行的代码称作线程安全的代码。线程安全的代码不包含竞态条件。当多个线程同时更新共享资源时会引发竞态条件。因此,了解Java线程执行时共享了什么资源很重要。局部变量局部变量存储在线程自己的栈中。也就是说,局部变量永远也不会被多个线程共享。所以,基础类型的局部变量是线程安全的。下面是基础类型的局部变量的一个例子:1pub

2017-08-13 14:19:55 185

转载 竞态条件与临界区

在同一程序中运行多个线程本身不会导致问题,问题在于多个线程访问了相同的资源。如,同一内存区(变量,数组,或对象)、系统(数据库,web services等)或文件。实际上,这些问题只有在一或多个线程向这些资源做了写操作时才有可能发生,只要资源没有发生变化,多个线程读取相同的资源就是安全的。多线程同时执行下面的代码可能会出错:1public c

2017-08-13 14:14:42 268

转载 如何创建并运行java线程

Java线程类也是一个object类,它的实例都继承自java.lang.Thread或其子类。 可以用如下方式用java中创建一个线程:1Tread thread = new Thread();执行该线程可以调用该线程的start()方法:1thread.start();

2017-08-13 14:11:43 225

转载 并发编程模型

并发系统可以采用多种并发编程模型来实现。并发模型指定了系统中的线程如何通过协作来完成分配给它们的作业。不同的并发模型采用不同的方式拆分作业,同时线程间的协作和交互方式也不相同。这篇并发模型教程将会较深入地介绍目前(2015年,本文撰写时间)比较流行的几种并发模型。并发模型与分布式系统之间的相似性本文所描述的并发模型类似于分布式系统中使用的很多体系结构。在并发系统中线程之间可以相互通

2017-08-13 10:41:08 228

转载 多线程的代价

原文链接:http://tutorials.jenkov.com/java-concurrency/costs.html从一个单线程的应用到一个多线程的应用并不仅仅带来好处,它也会有一些代价。不要仅仅为了使用多线程而使用多线程。而应该明确在使用多线程时能多来的好处比所付出的代价大的时候,才使用多线程。如果存在疑问,应该尝试测量一下应用程序的性能和响应能力,而不只是猜测。

2017-08-12 20:25:24 174

转载 多线程的优点

尽管面临很多挑战,多线程有一些优点使得它一直被使用。这些优点是:资源利用率更好程序设计在某些情况下更简单程序响应更快资源利用率更好想象一下,一个应用程序需要从本地文件系统中读取和处理文件的情景。比方说,从磁盘读取一个文件需要5秒,处理一个文件需要2秒。处理两个文件则需要:15秒读取文件A

2017-08-12 20:22:36 262

转载 Java并发性和多线程介绍

http://tutorials.jenkov.com/java-concurrency/index.html在过去单CPU时代,单任务在一个时间点只能执行单一程序。之后发展到多任务阶段,计算机能在同一时间点并行执行多任务或多进程。虽然并不是真正意义上的“同一时间点”,而是多个任务或进程共享一个CPU,并交由操作系统来完成多任务间对CPU的运行切换,以使得每个任务都有机会获得一定的时间片运

2017-08-12 20:13:52 200

转载 java中泛型创建数组的总结

在Java中,不能通过直接通过T[] tarr=new T[10]的方式来创建数组,最简单的方式便是通过Array.newInstance(Classtype,int size)的方式来创建数组例如下面的程序[java] view plaincopypublic class ArrayMaker {      private Class ty

2017-08-09 14:00:07 319

转载 泛型和数组以及Java是如何实现泛型的

《徐徐道来话Java》(2):泛型和数组,以及Java是如何实现泛型的 数组和泛型容器有什么区别  要区分数组和泛型容器的功能,这里先要理解三个概念:协变性(covariance)、逆变性(contravariance)和无关性(invariant)。  若类A是类B的子类,则记作A ≦ B。设有变换f(),若: 当A ≦ B时,有f(A)≦ f(B),

2017-08-09 13:44:58 940

转载 Arrays类——Arrays.asList()方法使用

java.util类 Arraysjava.lang.Object——java.util.Arrayspublic class Arraysextends Object此类包含用来操作数组(比如排序和搜索)的各种方法。此类还包含一个允许将数组作为列表来查看的静态工厂。 除非特别注明,否则如果指定数组引用为 null,则此类中的方法都会抛出 NullPointerExcept

2017-08-09 11:27:50 297

转载 深入分析 Java 中的中文编码问题

几种常见的编码格式为什么要编码不知道大家有没有想过一个问题,那就是为什么要编码?我们能不能不编码?要回答这个问题必须要回到计算机是如何表示我们人类能够理解的符号的,这些符号也就是我们人类使用的语言。由于人类的语言有太多,因而表示这些语言的符号太多,无法用计算机中一个基本的存储单元—— byte 来表示,因而必须要经过拆分或一些翻译工作,才能让计算机能理解。我们可以把计算机能够理

2017-08-08 15:45:31 255

转载 简化你的 java map 操作:Guava 之 Multimap 用法简介

前不久在这篇 使用 Google Guava 美化你的 Java 代码:1~4 中的 “一个集合统治一切 – Multimap” 部分提到过这货,不过当时那篇文章受限于篇幅,例子举的不够详尽,估计很多同学看了还是云里雾里,一头雾水。说个具体的应用场景吧:比如现在我有一份日志记录,每条记录的内容是一个 url 对应一个访客的 userid,我现在想得到 每个 url 对应的 pv、uv 数据

2017-08-07 14:24:24 1281

转载 java_UML:继承/泛化、实现、依赖、关联、聚合、组合的联系与区别

分别介绍这几种关系:UML关系:继承(泛化)、实现、依赖、关联、聚合、组合的联系与区别一、表示符号上的区别二、具体区别与联系1. 继承/泛化(Generalization)  【泛化关系】:是一种继承关系,表示一般与特殊的关系,它指定了子类如何特化父类的所有特征和行为。例如:老虎是动物的一种,即有老虎的特性也有动物的共性。继承是类与类或者接口与接口之

2017-08-03 16:45:13 341

转载 java动态代理

在目前的Java开发包中包含了对动态代理的支持,但是其实现只支持对接口的的实现。其实现主要通过是Java.lang.reflect.Proxy类和java.lang.reflect.InvocationHandler接口。Proxy类主要用来获取动态代理对象,InvocationHandler接口用来约束调用者实现业务接口[java] view plai

2017-08-02 14:31:31 142

转载 反射机制

什么是反射:反射是Java语言的一个特性,它允许程序在运行时来进行自我检查并且对内部的成员进行操作。例如它允许一个java的类获取他所有的成员变量和方法并且显示出来。java的反射机制的实现要借助4个类:Class,Constructor,Field,Method 其中Class代表的是类对象,Constructor  类的构造器对象,Field  类的属性对象,Method 

2017-08-02 14:19:00 310

转载 List remove操作注意问题

[java] view plain copypublic static void main(String[] args) {          // TODO Auto-generated method stub          List list = new ArrayList();          list.add("A");

2017-08-01 16:14:17 1041

转载 两种方式遍历HashMap

通过Map类的get(key)方法获取value时,会进行两次hashCode的计算,消耗CPU资源;而使用entrySet的方式,map对象会直接返回其保存key-value的原始数据结构对象,遍历过程无需进行错误代码中耗费时间的hashCode计算; 这在大数据量下,体现的尤为明显。[java] view plain copypack

2017-08-01 15:53:20 193

转载 java的几种对象解释

一、PO:persistent object 持久对象,可以看成是与数据库中的表相映射的Java对象。最简单的PO就是对象数据库中某个表中的一条记录,多个记录可以用PO的集合。PO中应该不包含任何数据库的操作二、VO:value object 值对象。通常用于业务层之间的数据传递,和PO一样也时仅仅包含数据而已。但应是抽象出的业务对象,可以和表对应,也可以不,这根据业务的需要。个人觉得同D

2017-08-01 15:42:08 187

转载 类方法和类实例的区别

先来看一道面试题:下列说法错误的有()A.在类方法中可用this来调用本类的类方法B.在类方法中调用本类的类方法时可直接调用C.在类方法中只能调用本类中的类方法D.在类方法中绝对不能调用实例方法 曾经我做过两次,都没做正确,一:第一次做的时候 没有回来查找答案,二:当时确实不理解什么是类方法。 ****************

2017-08-01 15:34:35 1063

转载 下面的代码有什么不妥之处

今天看到网上一面试题说下面的代码有什么不妥之处: [java] view plain copy1. if(username.equals(“zxx”){}      2.  int  x = 1;          return x==1?true:false;  第一题明白,比较的时候应该把可能为null的最

2017-08-01 15:22:21 624

转载 Java并发编程之重入锁

重入锁,顾名思义,就是支持重进入的锁,它表示该锁能够支持一个线程对资源的重复加锁。重进入是指任意线程在获取到锁之后能够再次获取该锁而不会被锁阻塞,该特性的实现需要解决以下两个问题。1、线程再次获取锁。锁需要去识别获取锁的线程是否为当前占据锁的线程,如果是,则再次成功获取。2、锁的最终释放。线程重复n次获取了锁,随后在第n次释放该锁后,其他线程能够获取到该锁。锁的最终释放要求锁对于获取进行计

2017-08-01 14:57:57 798 1

转载 Java并发编程之Lock

Lock是一个接口提供了无条件的、可轮询的、定时的、可中断的锁获取操作,所有加锁和解锁的方法都是显式的。 我们知道,synchronized是Java的关键字,是Java的内置特性,在JVM层面实现了对临界资源的同步互斥访问,但synchronized粒度有些大,在处理实际问题时存在诸多局限性,比如响应中断等。Lock提供了比synchronized更广泛的锁操作,它能以更优雅的方式处理线程同

2017-08-01 14:54:38 184

转载 Java并发编程之synchronized

Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一个时间,只有一个线程可以进行操作。多线程的同步机制对资源进行加锁,同步用以解决多个线程同时访问时可能出现的问题。对于普通同步方法,锁是当前实例对象。对于静态同步方法,锁是当前类的Class对象。对于同步方法块,锁是Synchonized括号里配置的对象。当一个线程试图访问同步代码块时,它首先必须得到锁,退

2017-08-01 14:50:38 144

转载 Java并发编程之CyclicBarrier

一、场景描述有四个游戏玩家玩游戏,游戏有三个关卡,每个关卡必须要所有玩家都到达后才能允许通过。其实这个场景里的玩家中如果有玩家A先到了关卡1,他必须等到其他所有玩家都到达关卡1时才能通过,也就是说线程之间需要相互等待。这和CountDownLatch的应用场景有区别,CountDownLatch里的线程是到了运行的目标后继续干自己的其他事情,而这里的线程需要等待其他线程后才能继续完成下

2017-08-01 14:22:58 125

转载 Java并发编程之CountDownLatch

一、场景描述在多线程程序设计中,经常会遇到一个线程等待一个或多个线程的场景例如:百米赛跑,十名运动员同时起跑,由于速度的快慢,肯定有先到达和后到达的,而终点有个统计成绩的仪器,当所有选手到达终点时,它会统计所有人的成绩并进行排序,然后把结果发送到汇报成绩的系统。再例如:当我们需要解析一个Excel里多个sheet的数据时,可以考虑使用多线程,每个线程解析一个sheet里

2017-08-01 14:10:33 212

转载 Git分支管理

首先,我们创建dev分支,然后切换到dev分支[plain] view plain copy$ git checkout -b dev  Git checkout命令加上-b参数表示创建并切换,相当于以下两条命令:[plain] view plain copy

2017-08-01 13:45:45 170

转载 Git五分钟教程

许多人认为Git太混乱或是复杂的版本控制系统,这篇文章是面向一些人想快速上手使用Git,对于大多数基本需求这篇文章涵盖了使用的70%至90%入门使用Git前 需要先建立一个仓库(repository)。你可以使用一个已经存在的目录作为git仓库或创建一个空目录使用您当前目录作为Git仓库,我们只需使它初始化[plain] vi

2017-08-01 13:41:13 151

转载 Java并发编程之读写锁

读写锁维护了一对相关的锁,一个用于只读操作,一个用于写入操作。只要没有writer,读取锁可以由多个reader线程同时保持。写入锁是独占的。可重入读写锁 ReentrantReadWriteLockReentrantReadWriteLock对象提供了readLock()和writeLock()方法, 用于获取读取锁和写入锁.读取锁允许多个reader线程同时持有,

2017-07-31 20:10:06 197

转载 ArrayList和Vector的区别

Vector和ArrayList这两个集合类的本质并没有太大的不同,它们都实现了List接口,而且底层都是基于Java数组来存储集合元素。在ArrayList集合类的源代码中可以看到如下一行。//采用elementData数组来保存集合元素private transient Object[] elementData;1212在Vector集合类的源代码中也可看到类似的一行。

2017-07-31 19:32:07 270

转载 ArrayList和LinkedList的区别

List代表一种线性表的数据结构,ArrayList则是一种顺序存储的线性表。ArrayList底层采用数组来保存每个集合元素,LinkedList则是一种链式存储的线性表。其本质上就是一个双向链表,但它不仅实现了List接口,还实现了Deque接口。也就是说LinkedList既可以当成双向链表使用,也可以当成队列使用,还可以当成栈来使用(Deque代表双端队列,即具有队列的特征,也具有栈的特征

2017-07-31 19:19:36 157

空空如也

空空如也

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

TA关注的人

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