public class Study01 {
public static void main(String[] args) {
Cherk cherk = new Cherk();
Productor productor = new Productor(cherk);
productor.setName("生产者");
productor.start();
Customer customer = new Customer(cherk);//创建两个消费者
customer.setName("消费者1");
customer.start();
Customer customer2 = new Customer(cherk);
customer2.setName("消费者2");
customer2.start();
}
}
//共享数据-店员
class Cherk{
private int productCount = 0;//产品
public synchronized void productorPtrduct(){//生产产品
if (productCount < 20){//如果小于20就一直生产
productCount++;//每次生产一个
System.out.println(Thread.currentThread().getName() + "开始生产第" + productCount + "个产品");
notify();//唤醒另有一个线程
}else {//如果大于20就阻塞
try {
wait();//当productCount >= 20就会进入阻塞状态,会释放同步锁,拥有同步锁才可以执行线程
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public synchronized void customerProduct(){//消费产品
if (productCount > 0){//如果>0消费者开始消费
System.out.println(Thread.currentThread().getName() + "开始消费第" + productCount + "个产品");
productCount--;
notify();
}else {//如果 <= 0就阻塞
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
//生产者
class Productor extends Thread{
//
private Cherk cherk;
//创建带参构造器,参数为Cherk类的实例化对象,方便在start的时候传入共享数据
public Productor(Cherk cherk) {
this.cherk = cherk;
}
@Override
public void run() {//生产产品
while (true){//一直生产
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
cherk.productorPtrduct();
}
}
}
class Customer extends Thread{
private Cherk cherk;
public Customer(Cherk cherk) {
this.cherk = cherk;
}
@Override
public void run() {
while(true){
try {
Thread.sleep(20);
} catch (InterruptedException e) {
e.printStackTrace();
}
cherk.customerProduct();
}
}
}