Java三个线程交替打印

在Java开发中,多线程编程是一种常见的技术。多线程可以提高程序的并发能力和效率,使得程序可以同时执行多个任务。在使用多线程编程时,线程之间的交替执行是一个非常重要的概念。本文将介绍如何使用Java实现三个线程的交替打印,并给出相应的代码示例。

了解多线程

在了解如何实现三个线程的交替打印之前,我们首先需要了解多线程的基本概念。

什么是线程?

线程是操作系统进行任务调度的最小单位,它是进程中的一个执行单元。一个进程可以包含多个线程,每个线程都可以独立执行任务。多线程编程允许多个任务并行执行,提高了程序的效率。

如何创建线程?

在Java中,可以通过继承Thread类或实现Runnable接口来创建线程。

  1. 继承Thread类:
class MyThread extends Thread {
    public void run() {
        // 线程执行的任务
    }
}

// 创建线程对象并启动
MyThread thread = new MyThread();
thread.start();
  1. 实现Runnable接口:
class MyRunnable implements Runnable {
    public void run() {
        // 线程执行的任务
    }
}

// 创建线程对象并启动
MyRunnable runnable = new MyRunnable();
Thread thread = new Thread(runnable);
thread.start();

如何控制线程的执行顺序?

在多线程编程中,如果需要控制线程的执行顺序,可以使用线程的join()方法,该方法可以使一个线程等待另一个线程完成后再执行。

Thread thread1 = new MyThread();
Thread thread2 = new MyThread();

thread1.start();
thread1.join();  // 等待thread1执行完成
thread2.start();

实现三个线程交替打印

现在我们已经了解了多线程的基本概念,下面我们来实现三个线程的交替打印。假设有三个线程A、B、C,它们需要交替打印出1到100的数字。

我们可以使用一个共享的计数器来控制三个线程的执行顺序。线程A只负责打印奇数,线程B只负责打印偶数,线程C只负责打印3的倍数。每个线程在打印完自己的数字后,将计数器加1,并唤醒下一个线程执行。

下面是具体的代码示例:

class Printer implements Runnable {
    private int number;
    private int count;
    private Object lock;

    public Printer(int number, int count, Object lock) {
        this.number = number;
        this.count = count;
        this.lock = lock;
    }

    public void run() {
        while (count <= 100) {
            synchronized (lock) {
                // 判断当前线程是否应该打印
                if (count % number == 0) {
                    System.out.println(Thread.currentThread().getName() + ": " + count);
                    count++;
                } else {
                    try {
                        // 当前线程等待,释放锁
                        lock.wait();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
                // 唤醒下一个线程
                lock.notifyAll();
            }
        }
    }
}

public class Main {
    public static void main(String[] args) {
        Object lock = new Object();

        Thread threadA = new Thread(new Printer(1, 1, lock), "ThreadA");
        Thread threadB = new Thread(new Printer(2, 1, lock), "ThreadB");
        Thread threadC = new Thread(new Printer(3, 1, lock), "ThreadC");

        threadA.start();
        threadB.start();
        threadC.start();
    }
}

在上面的代码中,我们使用了一个共享的锁对象lock来实现线程之间的同步。通过wait()和notifyAll()方法,线程可以在打印数字后挂起和唤醒其他线程。

总结

本文介绍了Java中如何实现三个线程的交替打印。通过创建三个线程并使用共享的计数器