java 创建两个线程 一个输出1-100的奇数,一个输出1-100的偶数 交替输出
时间: 2023-07-14 16:03:50 浏览: 191
在Java中,我们可以使用 `synchronized` 关键字和 `wait()`、`notify()` 方法来实现线程的交替输出。下面是一个示例代码:
```java
class OddEvenPrinter {
private int count;
private int maxCount;
public OddEvenPrinter(int maxCount) {
this.maxCount = maxCount;
this.count = 1;
}
public synchronized void printOdd() throws InterruptedException {
while (count <= maxCount) {
if (count % 2 != 0) {
System.out.println(count);
count++;
notify();
} else {
wait();
}
}
}
public synchronized void printEven() throws InterruptedException {
while (count <= maxCount) {
if (count % 2 == 0) {
System.out.println(count);
count++;
notify();
} else {
wait();
}
}
}
}
public class Main {
public static void main(String[] args) {
OddEvenPrinter printer = new OddEvenPrinter(100);
Thread oddThread = new Thread(() -> {
try {
printer.printOdd();
} catch (InterruptedException e) {
e.printStackTrace();
}
});
Thread evenThread = new Thread(() -> {
try {
printer.printEven();
} catch (InterruptedException e) {
e.printStackTrace();
}
});
oddThread.start();
evenThread.start();
}
}
```
在这个代码中,我们创建了一个名为 `OddEvenPrinter` 的类,它有一个 `count` 变量来表示当前要输出的数字,和一个 `maxCount` 变量来表示最大的数字。`printOdd()` 方法用于输出奇数,`printEven()` 方法用于输出偶数。
在每个方法中,我们使用 `synchronized` 关键字来确保线程的同步。在 `printOdd()` 方法中,当 `count` 为奇数时输出数字并递增,然后调用 `notify()` 方法唤醒等待的线程;如果 `count` 为偶数,则调用 `wait()` 方法使线程等待。在 `printEven()` 方法中同理。
在 `main()` 方法中,我们创建了两个线程 `oddThread` 和 `evenThread`,分别执行 `printOdd()` 和 `printEven()` 方法。然后启动这两个线程,它们将交替输出奇偶数。
阅读全文