编写一个应用程序创建两个线程,一个线程打印输出1~1000之间所有的奇数, 另外一个线程打印输出1~1000之间所有的偶数, 要求两个线程随机休眠一段时间后继续打印输出下一个数。请使用Runnable接口编程实现。
时间: 2024-02-29 08:52:52 浏览: 98
实现runnable接口创建线程
好的,下面是代码实现:
```java
public class OddEvenPrinter implements Runnable {
private final int max;
private final boolean isEvenNumber;
private static int number = 1;
private static final Object lock = new Object();
public OddEvenPrinter(int max, boolean isEvenNumber) {
this.max = max;
this.isEvenNumber = isEvenNumber;
}
@Override
public void run() {
while (number < max) {
synchronized (lock) {
while ((number % 2 == 0) == isEvenNumber) {
try {
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println(Thread.currentThread().getName() + ": " + number);
number++;
lock.notifyAll();
}
}
}
}
```
这是一个实现了 `Runnable` 接口的类,它有两个构造函数,一个用于打印奇数,一个用于打印偶数。在 `run()` 方法中,使用了 `synchronized` 关键字来保证线程安全。当当前线程不应该打印当前数时,会调用 `lock.wait()` 方法进入等待状态,当应该打印当前数时,会打印当前数并调用 `lock.notifyAll()` 方法唤醒其他等待中的线程。
下面是测试代码:
```java
public class OddEvenPrinterTest {
public static void main(String[] args) {
OddEvenPrinter oddPrinter = new OddEvenPrinter(1000, false);
OddEvenPrinter evenPrinter = new OddEvenPrinter(1000, true);
Thread oddThread = new Thread(oddPrinter, "OddThread");
Thread evenThread = new Thread(evenPrinter, "EvenThread");
oddThread.start();
evenThread.start();
}
}
```
在 `main()` 方法中,我们创建了两个 `OddEvenPrinter` 实例,一个用于打印奇数,一个用于打印偶数。然后创建两个线程,并启动它们。这样就可以实现两个线程同时打印奇偶数了。
希望这个例子能够帮助你了解如何使用 `Runnable` 接口编写多线程程序。
阅读全文