多线程——java练习题2

package com.chang.exer;

/**
 * 题目:生产者将产品交给店员,消费者从店员处取走产品,店员一次最多只能持有固定数量(20)产品满仓时叫停生产者生产,售出产品后
 * 有仓位时通知生产者继续生产;产品售空时通知消费者等待,进货后通知消费者来购买。
 * 要求:简单体现多线程执行和通信特点即可。
 * <p>
 * 分析
 * 1. 类:生产者类、店员类、消费者类;类的组合:生产者类{店员类型属性}、消费者类{店员类型属性}
 * 2. 线程1:消费者从店员处购买产品,消费线程;线程2:店员从生产者进货产品,进货和生产线程;
 * 3. 共享数据:产品数量(声明在店员类属性里,这样可以产生交互);
 * 4. 线程通信:线程1产品售空时wait,产品售出时唤醒线程2;线程2满仓时wait,进货时唤醒线程1;
 * 5.简化:逐个消费、逐个生产。
 *
 * @author Cao Longchang
 * @create 2022-04-29 17:54
 */

// 测试类
class ProductTest {
   
    public static void main(String[] args) {
   
        Clerk cle1 = new Clerk();
        Consumer con1 = new Consumer(cle1);
        Consumer con2 = new Consumer(cle1);
        Consumer con3 = new Consumer(cle1);
        Producer1 pro = new Producer1(cle1);

        Thread threadCon1 = new Thread(con1);
        Thread threadCon2 = new Thread(con2);
        Thread threadCon3 = new Thread(con3);
        Thread threadPro = new Thread(pro);

        threadCon1.setName("消费者甲");
        threadCon2.setName("消费者乙");
        threadCon3.setName("消费者丙");
        threadPro.setName("生产者");

        threadCon1.start();
        threadCon2.start();
        threadCon3.start();
        threadPro.start();
    }
}

// 生产者类
class Producer1 implements Runnable {
   
    private Clerk clerk;

    public Producer1(Clerk clerk
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值