答:
public class InputSpace {
private Integer[] arrEven;
private Integer[] arrOdd;
private int evenNum;
private int oddNum;
private int num;
public Integer[] getArrEven() {
return arrEven;
}
public Integer[] getArrOdd() {
return arrOdd;
}
public int getNum() {
return num;
}
public InputSpace() {
Random random = new Random();
List<Integer> listEven =new ArrayList<>();
List<Integer> listOdd =new ArrayList<>();
int num;
for (int i = 0; i < 1000 ; i++) {
if((num = random.nextInt(100) ) % 2 == 0) {
listEven.add(num);
}else {
listOdd.add(num);
}
}
arrEven = new Integer[listEven.size()];
listEven.toArray(arrEven);
arrOdd =new Integer[listOdd.size()];
listOdd.toArray(arrOdd);
}
synchronized public void printEven(){
if (evenNum % 10 == 0 && evenNum != 0){
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
for (int i = 0; i < 10; i++) {
System.out.println("打印第" + (evenNum + 1) + "个偶数"+ arrEven[evenNum]);
evenNum++;
num++;
}
if(num % 1000 == 0 && num !=0){
System.out.println("Done");
}
notifyAll();
}
public int getEvenNum() {
return evenNum;
}
public int getOddNum() {
return oddNum;
}
synchronized public void printOdd(){
if (oddNum % 10 == 0 && oddNum != 0 ){
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
for (int i = 0; i < 10 ; i++) {
System.out.println("打印第" + (oddNum + 1) + "个奇数"+ arrOdd[oddNum]);
oddNum++;
num++;
}
if(num % 1000 == 0 && num !=0){
System.out.println("Done");
}
notifyAll();
}
}
public class PrintEven extends Thread {
private InputSpace inputSpace;
public PrintEven(InputSpace inputSpace) {
this.inputSpace = inputSpace;
}
@Override
public void run() {
while(inputSpace.getNum() < 10000){
if(inputSpace.getArrEven().length == inputSpace.getEvenNum()){
System.out.println("偶数已打完");
return;
}
inputSpace.printEven();
}
}
}
public class PrintOdd extends Thread{
private InputSpace inputSpace;
public PrintOdd(InputSpace inputSpace) {
this.inputSpace = inputSpace;
}
@Override
public void run() {
while(inputSpace.getNum() < 10000){
if(inputSpace.getArrOdd().length == inputSpace.getOddNum()){
System.out.println("奇数已打完");
return;
}
inputSpace.printOdd();
}
}
}
public class Test4 {
public static void main(String[] args) {
InputSpace inputSpace = new InputSpace();
PrintEven printEven = new PrintEven(inputSpace);
PrintOdd printOdd = new PrintOdd(inputSpace);
System.out.println(inputSpace.getArrEven().length);
System.out.println(inputSpace.getArrOdd().length);
printEven.start();
printOdd.start();
}
}