行业资讯 java实现两个线程交替打印

java实现两个线程交替打印

254
 

Java实现两个线程交替打印

在多线程编程中,实现两个线程交替打印输出是一个经典的问题。这种情况下,我们通常使用线程间的通信来协调两个线程的执行顺序。本文将介绍如何使用Java来实现两个线程交替打印的问题。

1. 使用wait和notify方法

在Java中,可以使用waitnotify方法来实现线程的等待和唤醒机制。下面是一个使用waitnotify方法来交替打印奇偶数的示例:

public class AlternatePrinting {

    private static final Object lock = new Object();
    private static int count = 1;

    public static void main(String[] args) {
        Thread oddThread = new Thread(AlternatePrinting::printOdd);
        Thread evenThread = new Thread(AlternatePrinting::printEven);

        oddThread.start();
        evenThread.start();
    }

    public static void printOdd() {
        synchronized (lock) {
            try {
                while (count <= 10) {
                    if (count % 2 != 0) {
                        System.out.println("Odd: " + count);
                        count++;
                        lock.notify();
                    } else {
                        lock.wait();
                    }
                }
            } catch (InterruptedException e) {
                Thread.currentThread().interrupt();
            }
        }
    }

    public static void printEven() {
        synchronized (lock) {
            try {
                while (count <= 10) {
                    if (count % 2 == 0) {
                        System.out.println("Even: " + count);
                        count++;
                        lock.notify();
                    } else {
                        lock.wait();
                    }
                }
            } catch (InterruptedException e) {
                Thread.currentThread().interrupt();
            }
        }
    }
}

在这个示例中,我们使用一个共享的lock对象来实现线程间的同步。printOddprintEven方法分别负责打印奇数和偶数,通过waitnotify方法来协调两个线程的执行。

2. 注意事项

  • 使用waitnotify时,需要确保线程释放了锁,以允许其他线程进入临界区。
  • 在循环中使用wait,以防止虚假唤醒情况。

3. 结论

通过使用waitnotify方法,您可以在Java中实现两个线程的交替打印。这种方法充分利用了线程间的通信机制,确保了线程的协调和同步。通过合适地使用同步机制,您可以实现多线程编程中更复杂的问题,提高程序的并发性和性能。

更新:2023-10-19 00:00:11 © 著作权归作者所有
QQ
微信