两个线程,一个打印奇数,一个打印偶数,然后顺序打印出1-100
时间: 2024-10-11 12:13:23 浏览: 44
要实现这个需求,我们可以使用Java的`Thread`类以及`synchronized`关键字来确保线程之间的同步。这里有一个简单的示例,展示了如何创建两个线程,每个线程负责打印奇数或偶数,然后按照顺序输出1到100:
```java
public class PrintNumberThreads {
private static int count = 1;
private static final Object lock = new Object();
public static void main(String[] args) {
Thread oddThread = new Thread(new Runnable() {
@Override
public void run() {
printOddNumbers();
}
});
Thread evenThread = new Thread(new Runnable() {
@Override
public void run() {
printEvenNumbers();
}
});
oddThread.start();
evenThread.start();
}
private static synchronized void printOddNumbers() {
while (count <= 100) {
if (count % 2 != 0) {
System.out.println(Thread.currentThread().getName() + ": " + count++);
notifyAll(); // 通知其他线程
} else {
try {
wait(); // 自己等待
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
private static synchronized void printEvenNumbers() {
while (count <= 100) {
if (count % 2 == 0) {
System.out.println(Thread.currentThread().getName() + ": " + count++);
notifyAll(); // 通知其他线程
} else {
try {
wait(); // 自己等待
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
```
在这个例子中,我们使用了`synchronized`关键字来保证对共享变量`count`的互斥访问。当一个线程(例如打印奇数的线程)打印完一个数字后,它会调用`notifyAll()`唤醒等待的线程(在这里就是打印偶数的线程),接着自己进入休眠状态。这样就实现了按顺序执行。
阅读全文