Java8(二)Lambda语言

本文介绍了 Java SE 8 中新引入的 lambda 语言特性以及这些特性背后的设计思想。这些特性包括: lambda 表达式(又被成为“闭包”或“匿名方法”) 方法引用和构造方法引用 扩展的目标类型和类型推导 接口中的默认方法和静态方法 1. 背景 Java 是一门面向对象编程语言。面向对象编程语言和函数式编程语言中的基本元素(Basic Values)都可以动态封装程序行为:面向对象编程语言使用带有方法的对象封装行为,函数式编程语言使用函数封装行为。但这 ...

Java8(一)FunctionalInterface

主要内容 什么是函数式接口(Functional Interface) 函数式接口用途 关于@FunctionalInterface注解 函数式接口里允许定义默认方法 函数式接口里允许定义静态方法 函数式接口里允许定义java.lang.Object里的public方法 JDK中的函数式接口举例 1、什么是函数式接口(Functional Interface) 其实之前在讲Lambda表达式的时候提到过,所谓的函数式接口,当然首先是一个接口,然后就是在这 ...

Disruptor(三)RingBuffer单生产者写入

上一章主要介绍了消费者从RingBuffer读取数据,本章主要介绍单个生产者如何向RingBuffer数据写入数据。在RingBuffer数据写入过程中如何不要让Ring重叠,写入后通知消费者,生产者一端的批处理,以及多个生产者如何协同工作。 在RingBuffer写入数据的过程涉及到两阶段提交(two-phasecommit) 1)生产者需要申请buffer里的下一个节点。 2)当生产者向节点写完数据,需要调用调用publish发布数据。 1、单个生产者SingleP ...

深入理解Disruptor

Disruptor是LMAX公司开源的一个高效的内存无锁队列,一个高性能的异步处理框架,或者可以认为是最快的消息框架(轻量的JMS),也可以认为是一个观察者模式实现,或者事件-监听模式的实现,直接称disruptor模式。disruptor最大特点是高性能,其LMAX架构可以获得每秒6百万订单,用1微秒的延迟获得吞吐量为100K+。理解Disruptor的原理,可以帮助我们更好的理解内存无锁,CAS,volatile,缓冲行等并发原理。 本文主要从以下方面介绍disruptor: ...

JavaSPI(二)ServiceLoader深入解析

SPI(Service Provider Interface) ,是JDK内置的一种服务提供发现机制,说到JavaSPI的服务提供发现机制,就必须要了解ServiceLoader的原理。在ServiceLoader使用到Thread.currentThread().getContextClassLoader(),线程上下文类加载器来加载发现的服务类。 1、线程上下文类加载器 ContextClassLoader是从JDK1.2开始引入的。类java.lang.Thread 中的方法ge ...

JavaSPI(一)基础实例

我们系统里抽象的各个模块,往往有很多不同的实现方案,比如日志模块的方案,xml解析模块、jdbc模块的方案等。面向的对象的设计里,我们一般推荐模块之间基于接口编程,模块之间不对实现类进行硬编码。一旦代码里涉及具体的实现类,就违反了可拔插的原则,如果需要替换一种实现,就需要修改代码。 为了实现在模块装配的时候能不在程序里动态指明,这就需要一种服务发现机制。java spi就是提供这样的一个机制:为某个接口寻找服务实现的机制。有点类似IOC的思想,就是将装配的控制权移到程序之外,在模块化设计中 ...

Java注解(三)编译时注解

注解的处理除了可以在运行时通过反射机制处理外,还可以在编译期进行处理。 在编译期处理注解时,会处理到不再产生新的源文件为止,之后再对所有源文件进行编译。 在JDK6中,将注解处理器这一功能进行了规范化,形成了java.annotation.processing的API包,Mirror API则进行封装,形成javax.lang.model包。注解处理器的开发进行了简化,不再单独使用apt工具,而将此功能集成到了javac命令中。 1、定义注解 @Target(ElementT ...

Java注解(二)运行时注解

如果没有用来读取注解的工具,那注解将基本没有任何作用,它也不会比注释更有用,读取注解的工具叫作注解处理器。 Java提供了两种方式来处理注解: 第一种是利用运行时反射机制; 另一种是使用Java提供的API来处理编译期的注解。 本文章主要讲解使用反射机制方式的注解处理器,仅当定义的注解的@Retention为RUNTIME时,才能够通过运行时的反射机制来处理注解。 下面结合例子来说明这种方式的处理方法。 Java中的反射API(如java.lang.Class、 ...