java
光与热
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
java8 - fork-join之CompletableFuture 使用总结
CompletableFuture类实现了CompletionStage和Future接口。Future是Java 5添加的类,用来描述一个异步计算的结果,但是获取一个结果时方法较少,要么通过轮询isDone,确认完成后,调用get()获取值,要么调用get()设置一个超时时间。但是这个get()方法会阻塞住调用线程,这种阻塞的方式显然和我们的异步编程的初衷相违背。 为了解决这个问题,JDK吸收了原创 2017-12-20 19:00:03 · 3017 阅读 · 0 评论 -
异或运算
参与运算的两个值,如果两个相应位相同,则结果为0,否则为1。即:0^0=0, 1^0=1, 0^1=1, 1^1=0例如:10100001^00010001=101100000^0=0,0^1=1 0异或任何数=任何数1^0=1,1^1=0 1异或任何数-任何数取反任何数异或自己=把自己置0按位异或可以用来使某些特定的位翻转,如对数10100001的第2位和第3位翻转,可以将数与00000110进转载 2017-12-07 16:39:22 · 748 阅读 · 0 评论 -
线程池初探
1. 线程池存在的问题1.提交到线程池的任务避免依赖于其他的任务,否则对线程池的执行策略带来了约束,出现活跃度的问题 2.对于时间敏感的操作,比如GUI应用,将一个长时间运行的任务提交到单线程话的Exuctor中,或者将多个长时间运行的任务提交到只包含少量线程的线程池中或削弱Executor管理的服务的响应性 3.不应该在线程池中使用ThreadLocal变量当线程池都是同类的,独立的时候线程池原创 2017-08-18 17:43:17 · 639 阅读 · 0 评论 -
Java SPI机制
SPI的全称是Service Provider Interface。简单来说,SPI机制提供了一个表达接口和其具体实现类之间的绑定关系的方案。具体是在JAR包的"META-INF/services/"目录下建立一个文件,文件名是接口的全限定名,文件的内容可以有多行,每行都是该接口对应的具体实现类的全限定名。转载 2017-12-12 20:48:04 · 382 阅读 · 0 评论 -
java注解回顾
Java注解 又称Java标注,是Java语言5.0版本开始支持加入源代码的特殊语法元数据。Java语言中的类、方法、变量、参数和包等都可以被标注。Java标注和Javadoc不同,标注有自反性。在编译器生成类文件时,标注可以被嵌入到字节码中,由Java虚拟机执行时获取到标注Annotation 不能影响程序代码的执行,无论增加、删除 Annotation,代码都始终如一执行元注解元注解的作用就是用原创 2017-12-06 14:48:55 · 353 阅读 · 0 评论 -
java8 - Lambda集合操作
遍历集合在java8之前的版本中遍历一个集合常用下面这两种方法private static void list() { for (int i = 0; i < fruits.size(); i++) { System.out.println(fruits.get(i)); }}private static void list1() { for (String原创 2017-12-20 19:16:41 · 4613 阅读 · 1 评论 -
对volatile关键字的理解
问题来源于编码规范的一个例子一. 关于server模式下的主存和工作内存 规则40 多线程访问同一个可变变量,需增加同步机制说明:根据Java Language Specification中对Java内存模型的定义, JVM中存在一个主内存(Java Heap Memory),Java中所有变量都储存在主存中,对于所有线程都是共享的。每个线程都有自己的工作内存(Working Memo原创 2017-08-11 20:03:52 · 818 阅读 · 0 评论 -
java8 - 排序
java8以前在java以前为了对集合排序,通常的做法是这样的bean如下private static class Person { private final String name; private final int age; public Person(String name, int age) { this.name = name;原创 2017-12-20 21:05:23 · 1412 阅读 · 1 评论 -
java8 Stream简述
Stream是java 8的新特性,Stream是对集合功能的增强Stream不是集合元素它不是数据结构,不能用于保存数据,它是有关于算法和计算的Stream 就如同一个迭代器(Iterator),单向,不可往复,数据只能遍历一次,遍历过一次后即用尽了,就好比流水从面前流过,一去不复返。和迭代器又不同的是,Stream 可以并行化操作,迭代器只能命令式地、串行化操作。顾名思义,当使用串行方式去遍历时原创 2017-12-12 14:35:51 · 632 阅读 · 0 评论 -
java final用法汇总
final在java中可以声明变量成员,方法,类以及本地变量,final修饰变量表示该变量不能再改变,final修饰的类和方法表示子类无法再覆盖final关键字的优点JVM会优化final变量,final关键字提高了性能final变量可以在无需线程同步的情况下并发使用final的知识点final成员变量必须在声明的时候初始化或者在构造器中初始化或者在普通初始化快初始化,否则就会报编译错误。原创 2017-12-11 18:56:45 · 902 阅读 · 0 评论 -
java8 - 字符串操作
1.java-8新特性 String-Join操作1.字符串之间分隔符StringJoiner sj=new StringJoiner(","); sj.add("aaa"); sj.add("bbb"); sj.add("ccc"); System.out.println(sj.toString());运行结果aaa,bbb,ccc2原创 2017-12-15 19:00:52 · 2229 阅读 · 0 评论 -
java反射回顾<四>
jdk动态代理//动物接口public interface Animal { void shout(String sound);}//动物接口实现类public class Cat implements Animal { @Override public void shout(String sound) { for (int i = 0; i < 3;原创 2017-11-23 15:16:41 · 369 阅读 · 0 评论 -
动态绑定和静态绑定
动态绑定动态绑定是指编译器在编译阶段不知道要调用哪个方法Parent父类,父类有两个方法一个是类方法shout,一个是实例方法saypublic class Parent { String name; public static void shout(){ System.out.println("我是父类shout静态方法"); } public voi原创 2017-12-11 20:04:53 · 4416 阅读 · 4 评论 -
ThreadLocal使用及源码解读
ThreadLocal是什么 早在JDK 1.2的版本中就提供Java.lang.ThreadLocal,ThreadLocal为解决多线程程序的并发问题提供了一种新的思路。使用这个工具类可以很简洁地编写出优美的多线程程序。 当使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立地改变自己的副本,而不会影响其它线程所对应的原创 2017-01-20 16:20:47 · 480 阅读 · 0 评论 -
java反射回顾<三>
1.利用反射调用对象方法Method method = demo.getMethod("say", String.class);method.invoke(demo.newInstance(), "名字");运行结果Hello 名字,my name is null-null2.调用getterMethod method = demo.getMethod("get" + "Age");System原创 2017-11-23 09:07:26 · 345 阅读 · 0 评论 -
java反射回顾<二>
1.反射获取方法返回类型,参数,异常public static void main(String[] args) { Class<?> demo = null; try { demo = Class.forName("com.java.reflect.People"); } catch (ClassNotFoundExcepti原创 2017-11-22 20:45:58 · 350 阅读 · 0 评论 -
java反射回顾<一>
1.反射获取包名和类名People people=new People();System.out.println(people.getClass().getName());运行结果类名称->com.java.reflect.People类名称->com.java.reflect.People类名称->com.java.reflect.People2.所有对象是class的实例private s原创 2017-11-22 17:03:04 · 364 阅读 · 0 评论 -
Jdk1.8 HashMap解读
jdk1.8中HashMap重要属性Node关键函数hashstatic final int hash(Object key) { int h; return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16); }在这里(h = key.hashCode()) ^ (h >>> 16)主要分为了三步原创 2017-12-10 19:32:06 · 420 阅读 · 0 评论 -
尾递归
递归对于下面这个递归求阶乘调用private static long factorialRecursive(long n) { return n == 1 ? 1 : n * factorialRecursive(n - 1);}factorialRecursive调用在运行的时候每次执行factorialRecursive方法调用都会在调用栈上创建一个新的栈帧,用于保存每个方法调用的状态原创 2017-12-19 14:45:13 · 444 阅读 · 0 评论 -
Fork Join框架
1.1 核心思想Fork/Join框架是Java7提供了的一个用于并行执行任务的框架, 是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架,其实现思想与MapReduce有异曲同工之妙。Fork就是把一个大任务切分为若干子任务并行的执行,Join就是合并这些子任务的执行结果,最后得到这个大任务的结果。比如计算1+2+…+10000,可以分割成10个子任务,每个子任务分别转载 2018-01-06 20:44:33 · 661 阅读 · 0 评论 -
Java ClassLoader机制
一、什么是ClassLoader? 大家都知道,当我们写好一个Java程序之后,不是管是CS还是BS应用,都是由若干个.class文件组织而成的一个完整的Java应用程序,当程序在运行时,即会调用该程序的一个入口函数来调用系统的相关功能,而这些功能都被封装在不同的class文件当中,所以经常要从这个class文件中要调用另外一个class文件中的方法,如果另外一个文件不存在的,则转载 2018-01-07 18:22:58 · 415 阅读 · 0 评论 -
Runtime
java的runtime类是一个封装了JVM进程的类,每一个java程序实际上都是启动了一个JVM进程.每一个程序都对应一个Runtime实例,实例是由JVM初始化的,我们可以利用java的Runtime类获取进程的相关信息,启动其它进程,关闭当前进程等操作实例化runtime类Runtime类在整个jvm中只存在一个Runtime对象,通过Runtime类的静态方法进行实例化操作而不...原创 2018-02-08 23:06:38 · 472 阅读 · 0 评论 -
java transient关键字
java对象在实现了Serilizable接口后这个对象就可以被序列化,但是java的这种序列化机制会将这个类的所有属性和方法都序列化.有时候我们的一些敏感信息比如密码并不想序列化传输给对方,这个时候transient关键字就派上用场了,如果一个类的变量加上了transient关键字那么这个字段就不会被序列化下面这个例子我们利用transient避免User序列化过程中密码字段的序列化原创 2018-02-04 22:23:50 · 592 阅读 · 0 评论 -
EnumMap
EnumMap是Map接口的一种实现,专门用于枚举类型的键,所有枚举的键必须来自同一个枚举EnumMap不允许键为空,允许值为空EnumMap成员变量 private final Class keyType; private transient K[] keyUniverse; private transient Object[] vals; p原创 2018-02-05 22:40:46 · 1590 阅读 · 0 评论 -
GC - 四种引用
Java 中一共有 4 种类型的引用 : StrongReference、 SoftReference、 WeakReference 以及 PhantomReference 这 4 种类型的引用与 GC 有着密切的关系, 让我们逐一来看它们的定义和使用场景 :1.Strong ReferenceStrongReference 是 Java 的默认引用实现, 它会尽可能长时间的存活...转载 2018-02-11 21:28:15 · 741 阅读 · 0 评论 -
避免NPE
在java开发中中NPE异常是常见异常,在阿里java开发手册中就明确强调防止NPE是调用者的责任是程序员基本修养,本篇博客讲解利用一些小技巧避免NPE1.1equals方法public void equals() { //代表未知的对象,可能会是NULL也可能不是NULL Object unKnowObject = null; //这样某些情况下可能会抛出原创 2018-02-06 22:35:22 · 5604 阅读 · 1 评论 -
WeakHashMap
WeakHashMap,此种Map的特点是,当除了自身有对key的引用外,此key没有其他引用那么此map会自动丢弃此值,见实例:此例子中声明了两个Map对象,一个是HashMap,一个是WeakHashMap,同时向两个map中放入a、b两个对象,当HashMap remove掉a 并且将a、b都指向nu...转载 2018-03-09 10:34:24 · 717 阅读 · 0 评论 -
IdentityHashMap
在HashMap中,对于两个键值对key1-value1,key2-value2,在key相同(key1.equals(key2)==true)的情况下value1与value2不能共存,有没有一种数据结构使value1与value2共存呢?有,那就是IdentityHashMap.IdentityHashMap在比较键时候不是使用equals方法而是比较两个对象的引用,如果对象引用不同即使对象e...原创 2018-03-03 21:18:31 · 1429 阅读 · 0 评论 -
java并发之CopyOnWriteArrayList
原理java普通的集合在遍历的时候不允许修改(add,remove,set)这样的操作,否则会抛出java.util.ConcurrentModificationException。为了支持集合的并发操作,于是CopyOnArrayList和CopyOnArraySet这样的数据结构就应运而生了.CopyOnArrayList这样的数据结构实现的思想是读写分离,通俗的讲在添加元素的时候,先将当...原创 2017-11-02 10:00:59 · 871 阅读 · 0 评论 -
System.exit(0)和System.exit(1)区别
1.参考文献http://hi.baidu.com/accpzhangbo/blog/item/52aeffc683ee6ec238db4965.html2.解析查看Java.lang.System的源代码,我们可以找到System.exit(status)这个方法的说明,代码如下:[java] view plain copy print?/** * Terminates the cur转载 2017-08-10 08:42:54 · 375 阅读 · 0 评论 -
Time schedule和scheduleAtFixedRate区别
[java] view plain copy print?schedule和scheduleAtFixedRate的区别在于,如果指定开始执行的时间在当前系统运行时间之前,scheduleAtFixedRate会把已经过去的时间也作为周期执行,而schedule不会把过去的时间算上。 比如 SimpleDateFormat fTime = new SimpleDateFormat(“yyyy/M转载 2017-01-14 14:27:40 · 1246 阅读 · 0 评论 -
java集合框架
Java集合框架图 简化图: Java平台提供了一个全新的集合框架。“集合框架”主要由一组用来操作对象的接口组成。不同接口描述一组不同数据类型。 1、Java 2集合框架图 ①集合接口:6个接口(短虚线表示),表示不同集合类型,是集合框架的基础。 ②抽象类:5个抽象类(长虚线表示),对集合接口的部分实现。可扩展为自定义集合类。 实现类:8个实现类(转载 2017-01-14 15:02:41 · 306 阅读 · 0 评论 -
集合框架线程同步
首先研究下Collection下的同步和非同步,例如ArrayList List 接口的大小可变数组的实现。实现了所有可选列表操作,并允许包括 null 在内的所有元素。除了实现 List 接口外,此类还提供一些方法来操作内部用来存储列表的数组的大小。(此类大致上等同于 Vector 类,除了此类是不同步的。)size、isEmpty、get、set、iterator 和 listIt转载 2017-01-14 16:45:46 · 555 阅读 · 0 评论 -
java IO流的典型应用
java的IO流种类繁多,并不是所有的IO类都非常重要,因此我在这里总结了几个常用的IO流使用方法输入输出流字符型输入输出流下面这个例子使用了五种流,分别为BufferedReader,StringReader,PrintWriter,BufferedWriter,FileWriter 作用分别是 流 作用 StringReader 接收一个字符串作...原创 2017-01-14 23:03:21 · 714 阅读 · 0 评论 -
java标准IO
java的标准IO指的是System.in,System.out,System.err,在默认的情况下in代表键盘和out代表显示器,当程序通过System.in来获得输入时,实际上是通过键盘获得输入,当程序通过System.out执行输出时,程序总是输出到屏幕,其中in是基本IO类型InputStream,而out和err是javaIO的一种装饰器PrintStream,那么什么是PrintSt...原创 2017-01-15 08:54:45 · 5406 阅读 · 0 评论 -
标注的应用
Java自定义注释的两个应用: 第一个应用相当于获取配置文件的值。 定义一个注释,代码如下:package note;import java.lang.annotation.Documented;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.a转载 2017-01-15 14:57:32 · 483 阅读 · 0 评论 -
javaIO之SequenceInputStream
有些情况下,当我们需要从多个输入流中向程序读入数据。此时,可以使用合并流,将多个输入流合并成一个SequenceInputStream流对象。 SequenceInputStream会将多个流集组合成一个输入流并从第一个输入流开始读取,直到到达文件末尾,接着从第二个输入流读取,依次类推,直到到达包含的最后一个输入流的文件末尾为止。 合并流的作用是将多个源合并合一个源。下面是一个使用案例...原创 2017-02-19 11:16:11 · 554 阅读 · 0 评论 -
对IO流关闭的思考
流必须要关闭的原因java相对C,C++来说不需要手动释放内存,在对象引用被消除之后,正常情况下内存资源是会被垃圾回收,那么在使用完IO流之后为什么需要手动关闭. 这是为了回收系统资源,比如释放占用的端口,文件句柄,网络操作数据库应用等.对Unix系统来说,所有的资源都可以抽象成文件,所以可以通过lsof来观察。看下面这个例子,我们创建许多的IO流但是不关闭public clas...原创 2017-03-26 10:14:07 · 8189 阅读 · 1 评论 -
CommonDAOImpl中泛型使用
CommonDAOImpl是所有DAOImpl的父类,里面包含了所有DAO类会使用到的公共方法,比如说update(),save(),find()等方法 在查找操作时候,有这样的find()方法 public T findObjecByID(Serializable id) { //下面的entity是相应实体类 return (T)this.getHibe原创 2017-04-02 22:43:20 · 991 阅读 · 0 评论 -
StringBuffer和StringBuilder和String比较
因为StringBuffer和StringBuilder是字符串变量如下定义 char value[], 而String是字符串常量 如下定义private final char value[],同时StringBuffer是线程安全的,需要消耗比StringBuilder更多的资源,所以会有如下的速度大小关系 StringBuilder>StringBuffer>String原创 2017-04-02 23:01:16 · 354 阅读 · 0 评论
分享