- 只有一个抽象方法的接口我们称之为函数式接口。
- JDK 的函数式接口都加上了
@Functionallnterface
注解进行标识。但是无论是否加上该注解,只要接口中只有一个抽象方法,都是函数式接口。
Optional
我们在编写代码的时候出现最多的就是空指针异常。所以在很多情况下我们需要做各种非空的判断。例如:
1
2
3
4 Author author = getAuthor();
if(author != null){
System.out.println(author.getName());
}
- 尤其是对象中的属性还是对象的情况下,这种判断会更多。过多的判断语句会让我们的代码显得臃肿不堪。
所以在 JDK8 中引入了 Optional,养成使用 Optional 的习惯后你可以写出更优雅的代码来避免空指针异常。并且在很多函数式编程相关的 API 中也都用到了 Optional,如果不会使用 Optional 也会对函数式编程的学习造成影响。
Stream流
- Java8 的 Stream 使用的是函数式编程模式,如同它的名字一样,它可以被用来对集合或数组进行链状流式的操作。可以更方便的让我们对集合或数组操作。
lambda表达式
- Lambda 是 JDK8 中的一个语法糖,它可以对某些匿名内部类的写法进行简化,它是函数式编程思想的一个重要体现,让我们不用关注是什么对象,而是更关注我们对数据进行了什么操作。
- 对哪些匿名内部类的写法进行简化呢?原则是:
- 匿名内部类是一个接口,并且其中只有一个抽象方法需要被重写。
线程池ThreadPoolExecutor
线程池:一个容纳多个线程的容器,容器中的线程可以重复使用,省去了频繁创建和销毁线程对象的操作。
线程池作用:
- 降低资源消耗,减少了创建和销毁线程的次数,每个工作线程都可以被重复利用,可执行多个任务
- 提高响应速度,当任务到达时,如果有线程可以直接用,不会出现系统僵死
- 提高线程的可管理性,如果无限制的创建线程,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控
- 线程池的核心思想:线程复用,同一个线程可以被重复使用,来处理多个任务
- 池化技术 (Pool) :一种编程技巧,核心思想是资源复用,在请求量大时能优化应用性能,降低系统频繁建连的资源开销