摘要:
1. 概述 在本教程中,我们将介绍 Java 中最基本的机制之一 — 线程同步。 我们将首先讨论一些与并发相关的基本术语和方法,接着将开发一个简单的应用程序来处理并发问题,目的是更好地理解wait()和notify()。 2. Java 中的线程同步 在多线程环境中,多个线程可能会尝试修改同一资源。 阅读全文
摘要:
1. 简介 在本教程中,我们将学习什么是监视器以及如何在 Java 中使用它。 2. 什么是监视器? 监视器是一种同步机制,允许线程具有: 互斥 – 只有一个线程可以使用锁在某个时间点执行该方法 合作 – 使用等待集使线程等待满足某些条件的能力 为什么此功能称为“监视器”?因为它监视线程如何访问某些 阅读全文
摘要:
1. 简介 多线程应用程序中最常见的问题之一是竞争条件问题。 在本教程中,我们将了解什么是争用条件、检测它们的方法以及处理它们的方法。 2. 争用条件 根据定义,争用条件是程序的一种条件,其行为取决于多个线程或进程的相对计时或交错。一个或多个可能的结果可能是不希望的,从而导致错误。我们将这种行为称为 阅读全文
摘要:
1. 概述 在本教程中,我们将看到在 Java 中实现互斥锁的不同方法。 2. 互斥体 在多线程应用程序中,两个或多个线程可能需要同时访问共享资源,从而导致意外行为。此类共享资源的示例包括数据结构、输入输出设备、文件和网络连接。 我们将此方案称为争用条件。并且,程序访问共享资源的部分称为关键部分。因 阅读全文
摘要:
1. 概述 简单地说,锁是一种比标准同步块更灵活、更复杂的线程同步机制。 Lock接口从 Java 1.5 开始就已经存在了。它是在java.util.concurrent.lock包中定义的,它提供了广泛的锁定操作。 在本教程中,我们将探讨Lock接口的不同实现及其应用程序。 2. 锁定块和同步块 阅读全文
摘要:
1. 概述 在本文中,我们将学习在 Java 中使用同步块。 简而言之,在多线程环境中,当两个或多个线程尝试同时更新可变共享数据时,就会发生争用条件。Java 提供了一种机制,通过同步对共享数据的线程访问来避免竞争条件。 标记为已同步的一段逻辑成为同步块,在任何给定时间只允许一个线程执行。 2. 为 阅读全文
摘要:
1. 概述 在本文中,我们将研究最有用的构造之一java.util.concurrent来解决并发生产者-消费者问题。我们将研究BlockingQueue接口的 API 以及该接口中的方法如何使编写并发程序更容易。 在本文的后面,我们将展示一个具有多个生产者线程和多个使用者线程的简单程序的示例。 2 阅读全文
摘要:
1. 简介 在本文中,我们将提供CountDownLatch类的指南,并演示如何在一些实际示例中使用它。 本质上,通过使用CountDownLatch,我们可以使线程阻塞,直到其他线程完成给定任务。 2. 并发编程中的用法 简单地说,CountDownLatch有一个计数器字段,你可以根据需要递减。 阅读全文
摘要:
1. 概述 在本快速教程中,我们将探讨 Java 中信号量和互斥体的基础知识。 2.信号量 我们将从java.util.concurrent.Semaphore开始。我们可以使用信号量来限制访问特定资源的并发线程数。 在下面的示例中,我们将实现一个简单的登录队列来限制系统中的用户数量: class 阅读全文
摘要:
1. 概述 java.util.concurrent包提供了用于创建并发应用程序的工具。 在本文中,我们将对整个软件包进行概述。 2. 主要部件 java.util.concurrent包含太多的功能,无法在一篇文章中讨论。在本文中,我们将主要关注此软件包中一些最有用的实用程序,例如: Execut 阅读全文