摘要:
1. 概述 ExecutorService框架使在多个线程中处理任务变得容易。我们将举例说明一些等待线程完成执行的场景。 此外,我们还将展示如何优雅地关闭ExecutorService并等待已经运行的线程完成其执行。 2.Executor关闭后 当使用Executor时,我们可以通过调用shutdo 阅读全文
摘要:
1. 概述 本教程介绍了 Java 中的线程池。我们将从标准Java库中的不同实现开始,然后查看Google的Guava库。 2. 线程池 在 Java 中,线程映射到系统级线程,这些线程是操作系统的资源。如果我们不受控制地创建线程,我们可能会很快耗尽这些资源。 操作系统也会在线程之间进行上下文切换 阅读全文
摘要:
1. 简介 Java 9对CompletableFuture类进行了一些更改。这些更改是作为JEP 266的一部分引入的,目的是解决自 JDK 8 中引入以来常见的抱怨和建议,更具体地说,支持延迟和超时,更好地支持子类化和一些实用程序方法。 在代码方面,API 附带了八个新方法和五个新的静态方法。为 阅读全文
摘要:
1. 简介 Guava为我们提供了ListenableFuture,在默认的Java Future上具有丰富的API。让我们看看如何利用这一点来发挥我们的优势。 2.Future, ListenableFuture and Futures 让我们简要看看这些不同的类是什么以及它们之间的关系。 2.1 阅读全文
摘要:
1. 概述 在本文中,我们将学习如何从 Java 应用程序执行 shell 命令。 首先,我们将使用 .exec() 方法,其由运行时类提供。然后,我们将了解ProcessBuilder,它更易于定制。 2. 操作系统依赖性 命令行管理程序命令依赖于操作系统,因为它们的行为因系统而异。因此,在我们创 阅读全文
摘要:
1. 概述 在本文中,我们将快速浏览Java 8添加的主要新功能之一 - Streams。 我们将解释什么是流,并通过简单的示例展示创建和基本流操作。 2. 流接口 Java 8 中的主要新功能之一是引入了流功能 - java.util.stream,其中包含用于处理元素序列的类。 中心 API 类 阅读全文
摘要:
1. 概述 Java 8引入了Stream API,可以轻松地将集合迭代为数据流。创建并行执行并利用多个处理器内核的流也非常容易。 我们可能会认为在更多内核上分配工作总是更快。但事实往往并非如此。 在本教程中,我们将探讨顺序流和并行流之间的差异。我们将首先查看并行流使用的默认分叉联接池。 我们还将考 阅读全文
摘要:
1. 简介 本教程是CompletableFuture类的功能和用例指南,该类作为 Java 8 并发 API 改进引入。 延伸阅读: Java中的Runnable-Callable java.util.concurrent.Future 指南 2. Java 中的异步计算 异步计算很难推理。通常, 阅读全文
摘要:
1. 概述 从Java的早期开始,多线程一直是该语言的一个主要方面。Runnable是为表示多线程任务而提供的核心接口,Java 1.5 提供了Callable作为Runnable 的改进版本。 在本教程中,我们将探讨这两个接口的差异和应用。 2. 执行机制 这两个接口都旨在表示可由多个线程运行的任 阅读全文
摘要:
1. 概述 在本教程中,我们将了解Future 。自Java 1.5以来一直存在的接口,在处理异步调用和并发处理时非常有用。 2. 创建Future实例 简单地说,Future类表示异步计算的未来结果。此结果最终将在处理完成后显示在将来。 让我们看看如何编写创建和返回Future实例的方法。 长时间 阅读全文
摘要:
1. 概述 ExecutorService是一个 JDK API,可简化在异步模式下运行任务的过程。一般来说,ExecutorService会自动提供一个线程池和一个用于为其分配任务的API。 延伸阅读: Java 中的 fork/join 框架指南 java.util.concurrent 概述 阅读全文
摘要:
1. 概述 Java 7引入了fork/join框架。它提供了一些工具,通过尝试使用所有可用的处理器内核来帮助加快并行处理速度。它通过分而治之的方法实现这一目标。 在实践中,这意味着框架首先“fork”,递归地将任务分解为更小的独立子任务,直到它们足够简单,可以异步运行。 之后,“join”部分开始 阅读全文