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(五)DSL相关实战

本文主要讲解使用Disruptor的DSL演示生产者和消费者的数据交换,和以往的线程间通信不同,disruptor使用消息传递的方式,通过RingBuffer进行线程间的数据传递和通信,下面分别从一对一和多对一的模型进行讲解。 下面主要通过计算区间[0 , 100000000)中的所有数值相加为例子讲解Disruptor中的dsl使用。 1、一对一 一个生产者和一个消费者之间进行数据传递,使用disruptor主要涉及到RingBuffer中的ValueEvent定义,Va ...

Disruptor(四)RingBuffer多生产者写入

上一章主要介绍了单个生产者如何向RingBuffer数据写入数据,如何不要让Ring重叠,写入后通知消费者,生产者一端的批处理,以及多个生产者如何协同工作,本章主要介绍多生产者向RingBuffer数据写入数据。 1、多生产者MultiProducerSequencer申请下一个节点 和单生产者不同的是在next方法中会直接通过cursor.compareAndSet(current, next)设置生产者的游标cursor的sequence。大家很可能会问设置了生产者 ...

Disruptor(三)RingBuffer单生产者写入

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

Disruptor(二)RingBuffer读取

上一章主要介绍Ring Buffer的数据结构,本章主要讲解如何使用Disruptor从Ring Buffer中读取数据。 1、消费者通过ProcessingSequenceBarrier读取数据 能够读取数据的前提是数据已经写入到Ring Buffer中,关于数据的写入,后面一章节会详细讲解。 RingBuffer的元素的大小是2的n次方(上面ringBufferSize为8,从序号0开始)。消费者(Consumer)是一个想从RingBuffer里读取数据的线 ...

Redis(二)ShardedJedis一致性哈希

本文主要介绍一致性哈希的概念,以及在Redis中的ShardedJedis一致性哈希实现原理 1、非一致性哈希 在讨论一致性哈希之前,先认识下"非一致性哈希",例如HashMap。 当使用HashMap时,key被均匀地映射到数组之上,映射方法就是利用key的hash与数组长度取模(通过&运算)。 当put的数据超过负载因子loadFactor×2Len时,HashMap会按照2被的容量扩容。 新put进来的数据会通过与新数组的长度取模的方式进行映射。那之前 ...

Redis(一)基础数据类型

REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统。Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Map), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。 ...