生产者与消费者模型,是多线中经典应用,要求
- 线程之间要进行通信
- 按照生产消费去执行
synchronized 生产者消费者模型
/**
* 2个线程一个递增,一个递减
*/
public class SyncDemo {
public static void main(String[] args) {
ProducerCustomer c = new ProducerCustomer();
new Thread(() -> {
for (int i = 0; i < 5; i++) {
try {
c.increment();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}, "A").start();
new Thread(() -> {
for (int i = 0; i < 5; i++) {
try {
c.decrement();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
},"B").start();
}
}
/**
* 生产消费者模型
*/
class ProducerCustomer {
private int num = 0;
public synchronized void increment() throws InterruptedException {
while (num != 0) {
this.wait();
}
num++;
System.out.println(Thread.currentThread().getName() + " " + num);
this.notifyAll();
}
public synchronized void decrement() throws InterruptedException {
while (num == 0) {
this.wait();
}
num--;
System.out.println(Thread.currentThread().getName() + " " + num);
this.notifyAll();
}
}
- 运行结果
线程A 1
线程B 0
线程A 1
线程B 0
线程A 1
线程B 0
线程A 1
线程B 0
线程A 1
线程B 0
两个线程交替实现生产与消费