Java 学习记录-15

在这里插入图片描述

class Communication implements Runnable {  
    int i = 1;  
    public void run() {  
        while (true) {  
            synchronized (this) {  
                notify();  
                if (i <= 100) {  
                    System.out.println(Thread.currentThread().getName  
                            () + ":" + i++);  
                } else  
                    break;  
                try {  
                    wait();  
                } catch (InterruptedException e) {  
                    e.printStackTrace();  
                }  
            }  
        }  
    }  
}  
public class Test{  
    public static void main(String[] age){  
        Communication t = new Communication();  
        Thread a = new Thread(t,"线程1");  
        Thread b = new Thread(t,"线程2");  
        a.start();  
        b.start();  
    }  
}

在这里插入图片描述
在这里插入图片描述

public class ConsumerProducerTest {  
    public static void main(String[] args) {  
        Clerk clerk = new Clerk();  
        Producer p1 = new Producer(clerk);  
        Consumer c1 = new Consumer(clerk);  
        Consumer c2 = new Consumer(clerk);  
        p1.setName("生产者 1");  
        c1.setName("消费者 1");  
        c2.setName("消费者 2");  
        p1.start();  
        c1.start();  
        c2.start();  
    }  
}  
//生产者  
class Producer extends Thread{  
    private Clerk clerk;  
    public Producer(Clerk clerk){  
        this.clerk = clerk;  
    }  
    @Override  
    public void run() {  
        System.out.println("=========生产者开始生产产品========");  
        while(true){  
            try {  
                Thread.sleep(40);  
            } catch (InterruptedException e) {  
                e.printStackTrace();  
            }  
//要求 clerk 去增加产品  
            clerk.addProduct();  
        }  
    }  
}  
//消费者  
class Consumer extends Thread{  
    private Clerk clerk;  
    public Consumer(Clerk clerk){  
        this.clerk = clerk;  
    }  
    @Override  
    public void run() {  
        System.out.println("=========消费者开始消费产品========");  
        while(true){  
            try {  
                Thread.sleep(90);  
            } catch (InterruptedException e) {  
                e.printStackTrace();  
            }  
//要求 clerk 去减少产品  
            clerk.minusProduct();  
        }  
    }  
}  
//资源类  
class Clerk {  
    private int productNum = 0;//产品数量  
    private static final int MAX_PRODUCT = 20;  
    private static final int MIN_PRODUCT = 1;  
    //增加产品  
    public synchronized void addProduct() {  
        if(productNum < MAX_PRODUCT){  
            productNum++;  
            System.out.println(Thread.currentThread().getName() +  
                    "生产了第" + productNum + "个产品");  
//唤醒消费者  
            this.notifyAll();  
        }else{  
            try {  
                this.wait();  
            } catch (InterruptedException e) {  
                e.printStackTrace();  
            }  
        }  
    }  
    //减少产品  
    public synchronized void minusProduct() {  
        if(productNum >= MIN_PRODUCT){  
            System.out.println(Thread.currentThread().getName() +  
                    "消费了第" + productNum + "个产品");  
            productNum--;  
//唤醒生产者  
            this.notifyAll();  
        }else{  
            try {  
                this.wait();  
            } catch (InterruptedException e) {  
                e.printStackTrace();  
            }  
        }  
    }  
}

在这里插入图片描述
在这里插入图片描述

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值