题目

交替打印奇偶数

 

资源实体

public class Num {

int i = 1;

// true: 打印奇数 false: 打印偶数
boolean flag = true;

}

 

打印奇数线程

public class PrintOddThread implements Runnable {
private final Num num;

public PrintOddThread(Num num) {
this.num = num;
}

@Override
public void run() {
while (num.i < 10000) {
synchronized (num) {
if (num.flag) {
System.out.println("奇数\t" + num.i);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
num.i++;
num.flag = false;
} else {
try {
num.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
}

 

打印偶数线程

public class PrintEvenThread implements Runnable {
private final Num num;

public PrintEvenThread(Num num) {
this.num = num;
}

@Override
public void run() {
while (num.i < 10000) {
synchronized (num) {
if (!num.flag) {
System.out.println("偶数\t" + num.i);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
num.i++;
num.flag = true;
} else {
num.notify();
}
}
}
}
}

 

主函数

public class App {

public static void main(String[] args) throws IOException {

ExecutorService executor = Executors.newFixedThreadPool(2);

Num num = new Num();

executor.execute(new PrintOddThread(num));
executor.execute(new PrintEvenThread(num));

executor.shutdown();
}

}

 

运行结果

奇数  1
偶数 2
奇数 3
偶数 4
奇数 5
偶数 6
奇数 7
偶数 8
奇数 9
偶数 10
奇数 11
偶数 12
奇数 13
偶数 14
奇数 15
偶数 16
奇数 17
偶数 18
奇数 19
偶数 20
......