实战java高并发程序设计jdk8910与并发

java8函数式编程简介

函数作为一等公民

一个函数可以作为另一个函数的返回值.

//js中
function f1(){
    var n=1;
    function f2(){
        alert(n);
    }
    return f2;
}

var result=f1();
result();      //1

无副作用

副作用指的是函数在调用过程中,除了给出返回值,还修改函数外部的状态.
函数式编程认为,函数的副作用应该尽量被避免.
注意:
显示函数:与外界交换数据的唯一渠道是参数和返回值,不会读取或修改函数的外部状态
隐式函数:除参数和返回值外,还会读取/修改外部信息.

声明式

命令式: 使用可变对象和指令
声明式: 需要提供明确的指令操作
//命令式
public static void imperative(){
    int[] iArr={1,3,4,5,6,9,7,8,4,2};
    for(int i=0;i<iArr.length;i++){
        System.out.println(iArr[i]);
    }

}

//声明式
public static void declarative(){
    int[] iArr={1,3,4,5,6,9,7,8,4,2};
    Arrays.stream(iArr).forEach(System.out::println);
}

不变的对象

函数式编程中,几乎所有传递的对象都不会被轻易修改
int[] iArr={1,3,4,5,6,9,7,8,4,2};
Arrays.stream(arr).map((x)->x=x+1).forEach(System.out::println); //输出+1的数组
System.out.println();
Arrays.stream(arr).forEach(System.out::println);  //原数组不变

易于并行

不变模式不需要关心线程安全问题,多线程下性能更好.

更少的代码

简洁明了,代码更少

函数式编程基础

FunctionalInterface注释

函数式接口只能有一个抽象方法,任何被Object实现的方法,都不能被视为抽象方法
@FunctionalInterface
public static interface IntHandler{
    void handle(int i)
}

@FunctionalInterface
public static interface IntHandler{
    void handle(int i);
    boolean equals(Object obj);    //object中含有的方法,该接口为函数式接口
}

并行流与并行排序

增强future:CompletableFuture

读写锁改进:StampedLock

原子类的增强

ConcurrentHashMap的增强

发布与订阅模式

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理