19、Java并发 Java wait() 和 notify() 方法

大家有没有发现,其实 「 一文秒懂 」 系列讲述的都是多线程并发开发的问题。这个话题太大了,估计没有上百篇文章都解释不清楚。 本文,我们来讲解下 Java 并发中的基础的基础,核心的核心,Java 并发编程中的最基本的机制之一 – 「 线程同步 」 为了方便你理解并发编程中的各种概念和术语,我们首先

水木 发布于 2024-07-19

18、Java并发 Java 之 Runnable 还是 Thread ?

写Java 代码的时候,我们经常会有这样的疑问:我到底是实现一个 Runnable 呢,还是扩展一个 Thread 类? 你的答案是什么呢? 那有没有标准答案呢? 答案是什么呢? 我们先来分析下,看看哪种方法在实践中更有意义以及为什么? 扩展一个线程 ( Thread 类 )

水木 发布于 2024-07-19

17、Java并发 Java Thread 生命周期

本文中,我想详细的讨论下 Java 中的核心概念 – 线程的生命周期。我会使用一张我自制的图片加上实用的代码片段,一步一步的详细剖析线程的各个状态和各个状态之间如何转换。 Java 中的多线程 Java 语言中, 多线程是由 Thread 的核心概念驱动的。因为多线程中的每一个线程都相互独立,有着自

水木 发布于 2024-07-19

16、Java并发 Java ThreadLocalRandom

随机数生成是一个非常常见的操作,而且 Java 也提供了 java.util.Random 类用于生成随机数,而且呢,这个类也是线程安全的,就是有一点不好,在多线程下,它的性能不佳。 为什么多线程下,Random 的性能不佳? 因为,它采用了多个线程共享一个 Random 实例。这样就会导致多个线程

水木 发布于 2024-07-19

15、Java并发 Java java.util.concurrent.Future

写了几篇 Java 一文秒懂 XXX 系列的文章后,对 Java 并发编程的设计思想真的是竖然起敬。 Java 在并发方面引入了 「 将来 」( Future ) 这个概念。把所有不在主线程执行的代码都附加了将来这个灵魂。主线程只负责其它并发线程的创建、启动、监视和处理并发线程完成任务或发生异常时的

水木 发布于 2024-07-19

14、Java并发 Java 守护线程 ( Daemon Thread )

在这篇简短的文章中,我们将讲解下 Java 中的守护线程,看看它们可以做什么。我们还将解释守护线程和用户线程之间的区别。 守护线程和用户线程的区别 Java 提供了两种类型的线程:** 守护线程** 和 用户线程 用户线程 是高优先级线程。JVM 会在终止之前等待任何用户线程完成其任务。 用户线程

水木 发布于 2024-07-19

13、Java并发 Java java.util.concurrent.Locks

对于Java 来讲,锁 ( Lock ) 是一种比标准同步块 ( synchronized block ) 更灵活,更复杂的线程同步机制。 其实,Java 1.5 就已经存在 Lock 接口了。这个 Lock 接口在 java.util.concurrent.lock 包中定义,提供了大量的锁操作。

水木 发布于 2024-07-19

12、Java并发 Java BlockingQueue

本文中,我们将介绍一个 java.util.concurrent 包提供的用于解决并发生产者 – 消费者问题的最有用的类 – BlockQueue。我们将介绍BlockingQueue 接口的 API 以及如何使用该接口的方法使编写并发程序更容易。 在本文的后面,我们将展示一个具有多个生产者线程和多

水木 发布于 2024-07-19

11、Java并发 Java CountDownLatch

本章节我们来讨论下 java.util.concurrent.CountDownLatch 这个类,顺带演示下如何在一些实际例子中使用它。 CountDownLatch 类的作用呢? 怎么说呢? 简单来说,我们可以使用它来阻塞线程,直到其他线程完成给定任务。 并发编程中使用 CountDownLat

水木 发布于 2024-07-19

10、Java并发 并发编程实战

应聘Java 岗,总是免不了几个 Java 并发编程的面试题,不过大多数都局限在 java.util.concurrent 包下的知识和实现问题。本文针对 Java 并发相关的常见的面试题做一些解释。 Q1: 进程和线程的区别? 这是一个非常基础的面试题,如果这道题没有回答的比较满意,一般情况下,面

水木 发布于 2024-07-19

09、Java并发 Java CompletableFuture ( 下 )

上一章节中我们讲解了 CompletableFuture 的一些基本用法,比如如何使用和如何处理异步计算结果。本章节我们继续,主要讲解如何使用 CompletableFuture 来组合异步计算的结果 组合 Futures CompletableFuture API 最吸引人的部分,应该是能够在一系

水木 发布于 2024-07-19

08、Java并发 Java CompletableFuture ( 上 )

本文我们来了解下 Java 8 引入的 CompletableFuture 类,了解下该类提供的功能和用例。 Java 中的异步计算 异步计算很难推理的,因为我们的大脑是同步的,会将任何计算看成是一系列的同步计算。 我们在实现异步计算时,往往会把回调的动作分散在代码中或者深深地嵌套在彼此内部,这种情

水木 发布于 2024-07-19

07、Java并发 Java Google Guava 实现

Guava 是托管在 Github.com 上的流行的 Google 开源的 Java 线程池库。 Guava 包含了许多有用的并发类,同时还包含了几个方便的 ExecutorService 实现,但这些实现类都无法通过直接实例化或子类化来创建实例。取而代之的是提供了 MoreExecutors 助

水木 发布于 2024-07-19

06、Java并发 Java ForkJoinPool

ForkJoinPool 是Java 7 中引入的 fork/join 框架的核心之一。它解决了一个常见的问题: 如何在递归中生成多个任务。因为,即使是使用一个简单的 ThreadPoolExecutor ,也会在不断的递归中快速耗尽线程。因为每个任务或子任务都需要自己的线程来运行。 在fork/j

水木 发布于 2024-07-19

05、Java并发 ScheduledThreadPoolExecutor

ScheduledThreadPoolExecutor 扩展自 一文秒懂 Java 线程池之 ThreadPoolExecutor 讲解的 了ThreadPoolExecutor 类,并且添加了其它方法实现了 ScheduledExecutorService 接口。 schedule() 方法允许在

水木 发布于 2024-07-19

04、Java并发 Java 线程池(下)

因为上一章节篇幅有限,所以我决定把 一文秒懂 Java 线程池 拆分为三篇文章单独介绍。本章节,我们就来看看 ThreadPoolExecutor 。 ThreadPoolExecutor ThreadPoolExecutor 是一个可被继承 ( extends ) 的线程池实现,包含了用于微调的许

水木 发布于 2024-07-19

03、Java并发 Java 线程池(上)

本文我们将讲解 Java 中的线程池 ( Thread Pool ),从 Java 标准库中的线程池的不同实现开始,到 Google 开发的 Guava 库的前世今生。 本章节涉及到很多前几个章节中阐述的知识点。我们希望你是按照顺序阅读下来的,不然有些知识会一头雾水。 Java 语言的实现中,把 J

水木 发布于 2024-07-19

02、Java并发 Java Fork-Join

fork/join 框架是 Java 7 中引入的 ,它是一个工具,通过 「 分而治之 」 的方法尝试将所有可用的处理器内核使用起来帮助加速并行处理。 在实际使用过程中,这种 「 分而治之 」的方法意味着框架首先要 fork ,递归地将任务分解为较小的独立子任务,直到它们足够简单以便异步执行。然后,

水木 发布于 2024-07-19

01、Java并发 Java ExecutorService

ExecutorService 是 Java java.util.concurrent 包的重要组成部分,是 Java JDK 提供的框架,用于简化异步模式下任务的执行。 一般来说,ExecutorService 会自动提供一个线程池和相关 API,用于为其分配任务。 实例化 ExecutorSer

水木 发布于 2024-07-19