package Thread1;
/**
* 主方法
*
* @author zhangyugeng
* 创建汽车类Car 创建汽车工厂类CarFactory 创建顾客类Client
*/
public class CreateAndBuyCar {
public static void main(String[] args) {
Car car = new Car();
CarFactory factory = new CarFactory(car);
Client client = new Client(car);
new Thread(factory).start();
new Thread(client).start();
}
}
/**
* @author zhangyugeng
* 汽车类
*/
class Car {
boolean existCar = false; // 判断是否存在汽车
/* 创造汽车的方法 */
public synchronized void createCar() throws InterruptedException {
if (existCar) {
wait(); // 存在汽车就等候
}
System.out.println("库存没有汽车,正在生产汽车");
Thread.sleep(6000); // 模拟生产车的时间
System.out.println("生产了大众汽车");
notifyAll(); // 唤醒其他线程,让顾客知道可以买车了
existCar = true;
}
/* 购买汽车的方法 */
public synchronized void buyCar() throws InterruptedException {
if (!existCar) {
wait(); // 不存在汽车,顾客就等候买车
}
System.out.println("正在购买汽车");
Thread.sleep(2000); // 模拟购买汽车时间
System.out.println("买好了大众汽车");
System.out.println();
Thread.sleep(1000);
notifyAll();
existCar = false;
}
}
/**
* 汽车工厂类
*/
class CarFactory implements Runnable {
Car car;
public CarFactory(Car car) {
this.car = car;
}
@Override
public void run() {
try {
for (int i = 0; i < 3; i++)
car.createCar(); // 生产车
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
/**
* 顾客类
*/
class Client implements Runnable {
Car car;
public Client(Car car) {
this.car = car;
}
@Override
public void run() {
try {
for (int i = 0; i < 3; i++)
car.buyCar(); // 购买车
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}