我被问到下面的问题,在一次采访中,我需要打印出偶数和奇数使用两个线程,所以我想出了下面的代码,但在这我使用两个类一个实现runnable接口,另一个打印出的数字使用
wait
notifyAll
public class PrintEvenOddTester {
public static void main(String[] args) {
Output print = new Output();
Thread t1 = new Thread(new EvenOddTask(print, 10, false));
Thread t2 = new Thread(new EvenOddTask(print, 10, true));
t1.start();
t2.start();
}
}
class EvenOddTask implements Runnable {
private int max;
private Output print;
private boolean isEvenNumber;
EvenOddTask(Output print, int max, boolean isEvenNumber) {
this.print = print;
this.max = max;
this.isEvenNumber = isEvenNumber;
}
@Override
public void run() {
int number = isEvenNumber == true ? 2 : 1;
while (number <= max) {
if (isEvenNumber) {
print.printEven(number);
} else {
print.printOdd(number);
}
number += 2;
}
}
}
class Output {
boolean isOdd = false;
public synchronized void printEven(int number) {
while (isOdd == false) {
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("Even:" + number);
isOdd = false;
notifyAll();
}
public synchronized void printOdd(int number) {
while (isOdd == true) {
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("Odd:" + number);
isOdd = true;
notifyAll();
}
}
我想看看在Java7中是否有更好或更简单的方法来完成这类任务
Output
EvenOddTask
上课?