Java 中使用两个线程打印奇偶数

2024 年 9 月 10 日 | 阅读 3 分钟

Java 中的多线程是一个强大的概念,它允许我们创建并发程序,从而有效地利用可用资源。理解多线程的一个经典例子是使用两个单独的线程打印奇数和偶数。在本节中,我们将探讨如何在 Java 中实现这一点,并讨论涉及的概念。

问题陈述

目标是创建两个线程,一个用于打印奇数,另一个用于打印偶数,以交替的方式进行。线程应该同步它们的输出,以确保数字按正确的顺序打印。

Java 线程

在 Java 中,我们可以通过扩展 Thread 类或实现 Runnable 接口来创建线程。我们将采用后一种方法,因为它允许在共享资源方面具有更大的灵活性,并促进良好的面向对象设计。

这是解决方案的基本大纲

  • 创建一个共享资源(一个类的实例),其中包含要打印的当前数字和一个用于协调两个线程的同步机制。
  • 创建两个单独的线程,一个负责打印奇数,另一个负责打印偶数。这些线程将操作共享资源。
  • 每个线程将打印当前数字,递增数字,并通知另一个线程开始打印。

文件名: PrintOddEvenUsingThreads.java

输出

Odd: 1
Even: 2
Odd: 3
Even: 4
Odd: 5
Even: 6
Odd: 7
Even: 8
Odd: 9
Even: 10

解释: 我们创建了一个 SharedResource 类,其中包含要打印的当前数字和一个使用称为 lock 的对象的同步机制。SharedResource 类中的 printOdd() 和 printEven() 方法使用 lock 对象进行同步。每个方法都打印当前数字,递增它,并通知另一个线程开始打印。

在 PrintOddEvenUsingThreads 类中,我们创建了两个线程,一个用于打印奇数,另一个用于打印偶数。这些线程操作 SharedResource 实例。我们启动线程并使用 join 方法来确保两个线程在主线程终止之前完成。

我们使用了 synchronized 关键字和一个共享的 lock 对象来确保 printOdd() 和 printEven() 方法以互斥的方式执行。它防止线程相互干扰,并确保它们交替打印数字。

结论

创建一个使用 Java 中的两个线程打印奇数和偶数的程序涉及线程之间的同步和协调。通过使用共享资源和同步机制,我们确保线程以可控的方式交替输出。该示例为 Java 中的多线程概念和同步提供了一个实际的介绍,演示了如何解决经典的并发编程问题。