应用场景是产品中需要有一个批量执行的任务,很多店铺同时执行,并且需要执行之后的结果进行业务处理,然后在全部执行完毕之后通知处理完毕 用Future和Callable虽然可以阻塞获取结果,但是因为处理起来有些繁琐,比较消耗资源,而CompletableFuture可以满足这个需求,让异步编程变的更加轻 ...
分类:
编程语言 时间:
2019-10-10 15:21:10
阅读次数:
323
背景(Background) 如果从一开始就将lambda表达式(闭包)作为Java语言的一部分,那么我们的Collections API肯定会与今天的外观有所不同。随着Java语言获得作为JSR 335一部分的lambda表达式,这具有使我们的Collections接口看起来更加过时的副作用。尽管 ...
分类:
编程语言 时间:
2019-10-09 15:25:17
阅读次数:
78
熟悉 ES6 的开发者,肯定对数组的一些方法不是很陌生: 、`filter` 等。在对一组对象进行统一操作时,利用这些方法写出来的代码比常规的迭代代码更加的简练。在 C? 中,有 LINQ 来实现。那么在 Java 中有这样的操作吗?答案是有的,Java8 中引入了大量新特性,其中一个就是 Java ...
分类:
编程语言 时间:
2019-10-07 21:40:17
阅读次数:
113
垃圾的标准 对象被判定为垃圾的标准: 没有被其他对象引用 判断对象是否为垃圾的算法: 引用计数算法 可达性分析算法 引用计数算法 判断对象的引用数量: 通过判断对象的引用数量来决定对象是否可以被回收 每个对象实例都有一个引用计数器,被引用则+1,完成引用则-1 任何引用计数 为0的对象实例可以被当作 ...
分类:
其他好文 时间:
2019-10-07 00:50:39
阅读次数:
93
在 Java 中,想处理日期和时间时,通常都会选用 这个类进行处理。不过不知道是设计者在当时没想好还是其它原因,在 Java 1.0 中引入的这个类,大部分的 API 在 Java 1.1 中就被标记为了 Deprecated(已过时),而这些标记为已过时的接口大部分都是一些 getter 和 se ...
分类:
编程语言 时间:
2019-10-06 17:03:15
阅读次数:
79
Java 8的Lambda表达式借鉴了C#和Scala等语言中的类似特性,简化了匿名函数的表达方式。Lambda表达式可以直接以内联的形式为函数式接口的抽象方法提供实现,并把整个表达式作为函数式接口的实例。什么是函数式接口?简单来说就是只包含一个抽象方法的接口,允许有默认的实现(使用default关 ...
分类:
编程语言 时间:
2019-10-05 20:51:59
阅读次数:
95
在上一节中,我们为了使用Lambda表达式不得不创建了各种函数描述符的函数式接口,其实Java 8已经给我们提供了一套能够描述常见函数描述符的函数式接口。比如Predicate<T>、Consumer<T>、Function<T,R>、Supplier<T>等,这些函数式接口位于java.util. ...
分类:
编程语言 时间:
2019-10-05 20:41:10
阅读次数:
85
Java 8 中的 Stream 俗称为流,它与 java.io 包里的 InputStream 和 OutputStream 是完全不同的概念。Stream 用于对集合对象进行各种非常便利、高效的聚合操作,或者大批量数据操作。Stream API 借助于Lambda 表达式,极大的提高编程效率和程 ...
分类:
编程语言 时间:
2019-10-05 20:25:41
阅读次数:
98
除了顺序流外,Java 8中也可以对集合对象调用parallelStream方法或者对顺序流调用parallel方法来生成并行流。并行流就是一个把内容分成多个数据块,并用不同的线程分别处理每个数据块的流。这样在使用流处理数据规模较大的集合对象时可以充分的利用多核CPU来提高处理效率。不过在一些情况下 ...
分类:
编程语言 时间:
2019-10-05 20:19:41
阅读次数:
132
在上一节中,我们了解到终端操作collect方法用于收集流中的元素,并放到不同类型的结果中,比如List、Set或者Map。其实collect方法可以接受各种Collectors接口的静态方法作为参数来实现更为强大的规约操作,比如查找最大值最小值,汇总,分区和分组等等。 准备工作 为了演示Colle ...
分类:
编程语言 时间:
2019-10-05 20:17:55
阅读次数:
100