题目
交替打印奇偶数
资源实体
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
......