分析
两个线程,一个打印奇数,一个打印偶数,然后顺序打印出1-100, 通过线程方法wait()、notify()互相配置、synchronized锁住共享资源即可
代码实现
/**
* 两个线程,一个打印奇数,一个打印偶数,然后顺序打印出1-100: wait()、notify()、synchronized
*/
public class Printer {
/**
* 共享资源num,不同线程都会使用到,因此必须加锁,以确保在同一时间只有一个线程可以访问共享资源
*/
private static Integer num = 1;
/**
* 加锁对象
*/
private static Object obj = new Object();
private static Integer MAX_NUM = 100;
public static void main(String[] args) {
new Thread(new OddPrinter()).start();
new Thread(new EvenPrinter()).start();
}
/**
* 打印奇数.
*/
static class OddPrinter implements Runnable {
@Override
public void run() {
while (num <= MAX_NUM) {
synchronized (obj) {
if (num % 2 != 0) {
System.out.println(num);
num++;
obj.notify();
} else {
try {
obj.wait();
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
}
}
}
}
/**
* 打印偶数
*/
static class EvenPrinter implements Runnable {
@Override
public void run() {
while (num <= MAX_NUM) {
synchronized (obj) {
if (num % 2 == 0) {
System.out.println(num);
num++;
obj.notify();
} else {
try {
obj.wait();
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
}
}
}
}
}