如何实现Java两线程交替输出

流程图

sequenceDiagram
    小白->>开发者: 请求教程
    开发者->>小白: 教授"Java两线程交替输出"方法

步骤

步骤 描述
1 创建两个线程对象,分别负责输出奇数和偶数
2 设置线程优先级,以便实现交替输出
3 使用synchronized关键字实现线程同步
4 使用wait()和notify()方法实现线程通信

代码示例

步骤一:创建两个线程对象

// 创建一个线程输出奇数
Thread oddThread = new Thread(() -> {
    // 输出奇数逻辑
});

// 创建一个线程输出偶数
Thread evenThread = new Thread(() -> {
    // 输出偶数逻辑
});

步骤二:设置线程优先级

// 设置奇数线程优先级为1
oddThread.setPriority(1);

// 设置偶数线程优先级为2
evenThread.setPriority(2);

步骤三:使用synchronized关键字实现线程同步

public class Main {
    private static Object lock = new Object();
    
    public static void main(String[] args) {
        // 同步锁为静态变量lock
        synchronized (lock) {
            // 线程同步逻辑
        }
    }
}

步骤四:使用wait()和notify()方法实现线程通信

public class Main {
    private static Object lock = new Object();
    private static int count = 0;
    
    public static void main(String[] args) {
        new Thread(() -> {
            synchronized (lock) {
                while (count < 10) {
                    if (count % 2 == 0) {
                        System.out.println(count);
                        count++;
                        lock.notify(); // 唤醒等待的线程
                    } else {
                        try {
                            lock.wait(); // 让当前线程等待
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                }
            }
        }).start();

        new Thread(() -> {
            synchronized (lock) {
                while (count < 10) {
                    if (count % 2 != 0) {
                        System.out.println(count);
                        count++;
                        lock.notify(); // 唤醒等待的线程
                    } else {
                        try {
                            lock.wait(); // 让当前线程等待
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                }
            }
        }).start();
    }
}

通过以上步骤,两个线程就可以交替输出数字了。希望这篇文章对你有所帮助,如果有任何疑问,欢迎随时向我提问。加油!