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

41次阅读

共计 1118 个字符,预计需要花费 3 分钟才能阅读完成。

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 的增强

发布与订阅模式

正文完
 0