多线程之生产者和消费者
生产者生产3台汽车后,消费者才执行销售,而生产者必须等汽车数量为0的时候才能开始生产汽车
生产者Producer
public class Producer extends Thread {
Car car;
public Producer(Car car) {
this.car = car;
}
@Override
public void run() {
while (true) {
try {
sleep(1000);
// 调用car的producer方法进行生产
car.producer();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
消费者Consumer
public class Consumer extends Thread {
Car car;
public Consumer(Car car) {
this.car = car;
}
@Override
public void run() {
while (true) {
try {
sleep(1000);
// 调用car的consumer方法进行消费
car.consumer();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
汽车类Car
public class Car {
int number = 0;
/**
*
* @Description: 生产者方法
* @author LYL
* @date 2021-02-25 18:36:28
*/
public synchronized void producer() throws InterruptedException {
// 如果已有汽车数量大于等于3时执行wait()方法
if (number >= 3) {
wait();
}
// 如果已有汽车数量为0辆则先生产至3辆汽车
if (number == 0) {
while (number < 3) {
System.out.println("生产汽车中~");
number++;
}
notify();
}
}
/**
*
* @Description: 消费汽车的方法
* @author LYL
* @date 2021-02-25 18:38:18
*/
public synchronized void consumer() throws InterruptedException {
// 如果数量为0时,唤醒生产汽车的producer方法
if (number == 0) {
notify();
}
// 当有汽车时开始消费
while (number > 0) {
System.out.println("消费汽车中~");
number--;
}
}
}
测试类 ProAndConTest
public class ProAndConTest {
public static void main(String[] args) {
Car car = new Car();
Producer t1 = new Producer(car);
Consumer t2 = new Consumer(car);
t1.start();
t2.start();
}
}