两个线程交替打印奇偶
经典问题
用两个线程交替打印奇数和偶数问题
思路1 用 synchronized 以及等待通知机制解决
// 互斥资源:要打印的数字
// 互斥锁:共享一把锁即可,如 Object lock = new Object();
// 线程要求的条件:两个线程交替执行
// 何时等待:打印完自己的数字等待对方打印
// 何时通知:打印安自己的数字通知对方打印
public class PrintEvenOdd {
private static volatile int number = 1;
private static int MAX = 100;
public static void main(String[] args) {
// 互斥锁
Object lock = new Object();
Runnable runnable = () -> {
synchronized (lock) {
while (number <= MAX) {
System.out.println(number++);
lock.notifyAll();
try {
lock.wait();
} catch (InterruptedException e) {}
}
lock.notifyAll();
}
};
// 启动奇数线程
new Thread(runnable, "奇数线程").start();
// 启动偶数线程
new Thread(runnable, "偶数线程").start();
}
}思路2 利用 synchronized 或者 Lock 接口结合判断奇偶的方式
思路3 可以利用 Lock 和 Condition 交替打印
最后更新于