先上代码:
public class Printer {
private static final Object lock = new Object();
private static int flg = 1;
private static void start() {
//打印奇数
Thread t1 = new Thread(() -> {
int printer = 1;
while (printer <= 1000) {
synchronized (lock) {
if (flg == 1) {
System.out.println(printer);
flg = 2;
printer += 2;
lock.notify();
} else {
try {
lock.wait();
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
}
}
});
//打印偶数
Thread t2 = new Thread(() -> {
int printer = 2;
while (printer <= 1000) {
synchronized (lock) {
if (flg == 2) {
System.out.println(printer);
flg = 1;
printer += 2;
lock.notify();
} else {
try {
lock.wait();
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
}
}
});
t1.start();
t2.start();
}
public static void main(String[] args) {
start();
}
}
思路与多线程交替输出abc100次(wait/notify)-CSDN博客 类似,可先参考,解析稍后补充!