首页 > 其他分享 >线程通信练习--生产者与消费者

线程通信练习--生产者与消费者

时间:2022-10-09 16:45:47浏览次数:47  
标签:goods Thread Clerk -- clerk 练习 线程 void public

package exer4;
/**
 * @author 高槐玉
 * #Description 生产者,消费者案例
 * #Date: 2022/10/9/14点08分
 * #Shangguigu:
 */
class Clerk{
    private  int goods = 0;
    //生产货物;
    public synchronized void createProduct() {
            if (goods < 20) {
                goods++;
                System.out.println(Thread.currentThread().getName() + "生产第:" + goods + "货物");
                notify();
            }else{
                try {
                    wait();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
    }

    public synchronized void consumerProduct() {
            if (goods > 0) {
                System.out.println(Thread.currentThread().getName() + "消费第:" + goods + "货物");
                goods--;
                notify();
            }else {
                //等待
                try {
                    wait();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }

    }
}
class Producer extends Thread{
    private Clerk clerk;

    public Producer(Clerk clerk){
        this.clerk = clerk;
    }
    public void run(){
            System.out.println(getName() + ":开始生产产品....");
        while (true) {
            try {
                Thread.sleep(50);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            clerk.createProduct();
        }
    }
}
class Consumer extends Thread{
    private Clerk clerk;
    public Consumer(Clerk clerk){
        this.clerk = clerk;
    }
    public void run(){
            System.out.println(getName() + ":开始消费产品...");
        while (true) {
            try {
                Thread.sleep(1500);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            clerk.consumerProduct();
        }
    }
}
public class Product {
    public static void main(String[] args) {
    Clerk c =new Clerk();
    Producer p1 = new Producer(c);
    Consumer c1 = new Consumer(c);
        p1.setName("生产者");
        c1.setName("消费者");
        p1.start();
        c1.start();
    }

}

 

标签:goods,Thread,Clerk,--,clerk,练习,线程,void,public
From: https://www.cnblogs.com/gaohuaiyu/p/16772676.html

相关文章

  • 代码随想录day15 ● 层序遍历 10 ● 226.翻转二叉树 ● 101.对称二叉树 2
    102.二叉树的层序遍历1classSolution{2public:3vector<vector<int>>levelOrder(TreeNode*root){4//创建一个队列用于存储每一层的结点5......
  • 第三章学习笔记
    本章讨论了Unix/Linux中的进程管理;阐述了多任务处理原则;介绍了进程概念;以一个编程示例来说明多任务处理、上下文切换和进程处理的各种原则和方法。多任务处理系统支持......
  • 函数的初步了解
    目录今日内容回顾今日内容回顾详解文件内光标移动案例计算机硬盘修改数据的原理文件内容修改函数前戏函数语法结构函数的定义与调用函数的分类函数的返回值函数的参数今日......
  • 进程和计划任务管理
    一、程序和进程的关系1、程序保存在硬盘、光盘等介质中的可执行代码和数据文件中静态保存的代码2、进程在CPU及内存中运行的程序代码动态执行的代码父、子进程......
  • CF896D Nephren Runs a Cinema 题解
    顺手搬一下吧···inluogu和其他题解不太一样的柿子。把0元,50元,100元分别看成\(-1\),\(0\),\(1\),则问题转化成有多少种由\(-1\),\(0\),\(1\),构成的长为\(n\)的序......
  • Python学习实验报告03——序列
    实验要求:完成课本实例部分及实战部分实验内容:Part1实例:实例01:创建一个文件命名为tips,导入日期时间类,定义一个包含七条励志文字的列表,获取当前星期作为索引输出每日一......
  • PVE虚拟机安装详解
    前言PVE,全称ProxmoxVirtualEnvironment,是基于Debian的Linux系统,虚拟机内核为KVM。硬件兼容性优秀。界面功能不强,很多操作要靠命令行,但扩展能力几乎是无限的。前期准备......
  • Jumpserver 数据迁移
    安装完成后配置文件在/opt/jumpserver/config/config.txt记录SECRET_KEY和BOOTSTRAP_TOKEN#cat/opt/jumpserver/config/config.txt|egrep"SECRET_KEY|BOOTSTRAP_TO......
  • Cisco PBR 中的 next-hop 多种设置实验
    1:起因在配置PBR中设置next-hop的时候对后面的一些参数不明白,研究清楚,刚好在网上找到这个帖子:​​http://www.doczj.com/doc/f99682692.html​​万分感谢!!!!命令总结:1:setip......
  • 基于html的购物网站【华为手机购物网站制作】学生网页设计作业源码
    ......