两个线程一个输出偶数一个输出奇数
时间: 2024-12-13 14:19:55 浏览: 12
在Java中,你可以创建两个线程分别负责输出奇数和偶数。这通常通过共享数据和使用条件变量来协调。下面是一个简单的示例:
```java
import java.util.concurrent.atomic.AtomicInteger;
public class OddEvenThread {
private AtomicInteger number = new AtomicInteger(0); // 使用原子整型保证线程安全
private final Object lock = new Object(); // 互斥锁
public class PrintOdd implements Runnable {
@Override
public void run() {
while (true) {
int num = number.getAndIncrement(); // 获取并递增,原子操作
if (num % 2 != 0) { // 如果是奇数
synchronized (lock) {
System.out.println(Thread.currentThread().getName() + " 输出:" + num);
lock.notify(); // 唤醒下一个线程
}
}
}
}
}
public class PrintEven extends PrintOdd {
@Override
public void run() {
super.run(); // 继承PrintOdd并覆盖run方法
while (number.get() % 2 == 0); // 直到找到一个偶数
}
}
public static void main(String[] args) {
PrintOdd oddThread = new PrintOdd();
PrintEven evenThread = new PrintEven();
new Thread(oddThread).start();
new Thread(evenThread).start(); // 同时启动两个线程
}
}
```
在这个示例中,`PrintOdd`和`PrintEven`都是实现了`Runnable`的内部类,它们各自获取并检查数字是否为奇数或偶数。当找到符合条件的数字时,会打印出来并通知另一个线程继续。`AtomicInteger`和`synchronized`确保了对数字的访问是线程安全的。
阅读全文