多线程之生产者和消费者

生产者生产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();
	}

}

posted @ 2021-02-25 18:42  阿伦啊  阅读(92)  评论(0编辑  收藏  举报