java程序,请利用线程间通信, 完成连续打印1-100的数字, 要求一条线程专门打印奇数,另外一条专门用来打印偶数
时间: 2023-05-12 07:04:47 浏览: 98
可以使用两个线程来完成这个任务,一个线程负责打印奇数,另一个线程负责打印偶数。使用 wait() 和 notify() 方法来实现线程间通信,确保奇数和偶数交替打印。
以下是示例代码:
```
public class NumberPrinter {
public static void main(String[] args) {
Object lock = new Object();
Thread oddThread = new Thread(new OddNumberPrinter(lock));
Thread evenThread = new Thread(new EvenNumberPrinter(lock));
oddThread.start();
evenThread.start();
}
}
class OddNumberPrinter implements Runnable {
private Object lock;
public OddNumberPrinter(Object lock) {
this.lock = lock;
}
@Override
public void run() {
synchronized (lock) {
for (int i = 1; i <= 100; i += 2) {
System.out.println(i);
lock.notify();
try {
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
lock.notify(); // 通知偶数线程结束
}
}
}
class EvenNumberPrinter implements Runnable {
private Object lock;
public EvenNumberPrinter(Object lock) {
this.lock = lock;
}
@Override
public void run() {
synchronized (lock) {
for (int i = 2; i <= 100; i += 2) {
System.out.println(i);
lock.notify();
try {
if (i < 100) {
lock.wait();
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
```
这个程序使用了一个共享对象 lock,两个线程都需要获取这个对象的锁才能执行。在奇数线程中,每次打印完奇数后,调用 lock.notify() 方法通知偶数线程可以执行了,然后自己进入等待状态,直到偶数线程打印完偶数后再次通知自己可以执行。在偶数线程中,每次打印完偶数后,调用 lock.notify() 方法通知奇数线程可以执行了,然后自己进入等待状态,直到奇数线程打印完奇数后再次通知自己可以执行。最后,奇数线程打印完 100 后,通知偶数线程结束。
阅读全文