多线程中的生产者消费者案例(代码片段)

技术很low的瓜贼 技术很low的瓜贼     2022-12-14     229

关键词:

生产者消费者

Object类常用的方法

方法功能
void wait()用于使得线程进入等待状态,直到其它线程调用notify()或notifyAll()方法
void wait(long timeout)用于进入等待状态,直到其它线程调用方法或参数指定的毫秒数已经过去为止
void notify()用于唤醒等待的单个线程
void notifyAll()用于唤醒等待的所有线程

案例描述

在一个固定大小的仓库中存放物品,当仓库不为满的时候,生产者生产,同时消费者还在消费,实现同步机制

  • 仓库代码:
package 线程.ProduceAndConsumer;

public class StoreHouse 

    private int cnt = 0; // 描述商品数量

    public synchronized void produceProduct() 
        notify();
        if (cnt < 10) 
            System.out.println("线程" + Thread.currentThread().getName() + "正在生产第" + (cnt + 1) + "个商品");
            cnt ++;
         else 
            try 
                wait();
             catch (InterruptedException e) 
                e.printStackTrace();
            
        
    

    public synchronized void produceConsumer() 
        notify();
        if (cnt > 0) 
            System.out.println("线程" + Thread.currentThread().getName() + "正在消费第" + cnt + "个商品");
            cnt --;
         else 
            try 
                wait();
             catch (InterruptedException e) 
                e.printStackTrace();
            
        
    


  • 生产者代码:
package 线程.ProduceAndConsumer;

public class ProduceThread implements Runnable


    // 声明一个仓库类型的引用作为成员变量,为了能够调用仓库类中的方法 合成服用原则
    private StoreHouse storeHouse;

    public ProduceThread() 
    

    public ProduceThread(StoreHouse storeHouse) 
        this.storeHouse = storeHouse;
    

    @Override
    public void run() 
        while (true) 
            storeHouse.produceProduct();
            try 
                Thread.sleep(100);
             catch (InterruptedException e) 
                e.printStackTrace();
            
        

    


  • 消费者代码:
package 线程.ProduceAndConsumer;

public class ConsumerThread implements Runnable

    private StoreHouse storeHouse;

    public ConsumerThread() 
    

    public ConsumerThread(StoreHouse storeHouse) 
        this.storeHouse = storeHouse;
    

    @Override
    public void run() 
        while (true) 
            storeHouse.produceConsumer();
            try 
                Thread.sleep(1000);
             catch (InterruptedException e) 
                e.printStackTrace();
            
        
    


  • 实现类代码:
package 线程.ProduceAndConsumer;

public class Test 

    public static void main(String[] args) 
        StoreHouse storeHouse = new StoreHouse();

        ProduceThread produceThread = new ProduceThread(storeHouse);

        ConsumerThread consumerThread = new ConsumerThread(storeHouse);

        Thread t1 = new Thread(produceThread);
        Thread t2 = new Thread(consumerThread);

        t1.start();
        t2.start();
    


多线程(生产者-消费者)(代码片段)

案例介绍生产者:Producer,消费者Consumer,消费品,Cake,消费品存放队列CakeQueue代码说明生产者ProducerpublicclassProducerextendsThreadprivatefinalCakeQueuecakeQueue;privatestaticintcakeNo=0;publicProducer(Stringname,CakeQueuecakeQue 查看详情

java多线程:生产者消费者模型(代码片段)

文章目录1.生产者消费者1.1生产者和消费者模式概述1.2经典案例:生产者和消费者1.2.1Object类的等待和唤醒方法1.2.2代码实现1.3生产者和消费者案例优化1.3.1代码实现1.生产者消费者生产者消费者模式是一个十分经典的多线程协... 查看详情

多线程线程状态和案例演示(代码片段)

...Dead):线程的正式结束方式,run方法执行完毕并返回。生产者消费者模式publicclassMainMethod/***1、产品/食物*2、缓冲区/柜台的大小*3、生产者/厨师*4、消费者/顾客*///主方法publicstaticvoidmain(String[]args)//实例化缓冲区/柜台BlockingQueue&l... 查看详情

多线程应用——生产者消费者问题(代码片段)

前言生产者和消费者问题是多线程模型中的经典问题:生产者和消费者在同一时间段内共用同一个存储空间,生产者往存储空间中添加产品,消费者从存储空间中取走产品,当存储空间为空时,消费者阻塞,当存储空间满时,生... 查看详情

多线程(代码片段)

多线程(一)1.多进程补充(生产者消费者模型)生产者消费者模型在并发编程中使用生产者和消费者模式能够解决绝大多数并发问题。该模式通过平衡生产线程和消费线程的工作能力来提高程序的整体处理数据的速度。为什么要使用... 查看详情

高并发编程学习——线程通信详解(代码片段)

...m/2019/11/26/gao-bing-fa-bian-cheng-xue-xi-1-bing-fa-ji-chu/一、经典的生产者消费者案例上一篇文章我们提到一个应用可以创建多个线程去执行不同的任务,如果这些任务之间有着某种关系,那么线程之间必须能够通信来协调完成工作。生产... 查看详情

java——多线程高并发系列之生产者-消费者模式(代码片段)

...2测试结果3写在前面在Java中,负责生产数据的模块是生产者,负责使用数据的模块是消费者。生产者消费者解决数据的平衡问题,即先有数据然后才能使用,没有数据时,消费者需要等待。下面的案例中& 查看详情

python爬虫编程思想(141):多线程和多进程爬虫--生产者-消费者问题与queue模块(代码片段)

...例:生成者-消费者模型。在这个场景下,商品或服务的生产者生成商品,然后将其放到类似队列的数据结构中,生产商品的时间是不确定的,同样消费者消费生产者生产的商品的时间也是不确定的。      &n... 查看详情

java基础——多线程(代码片段)

...1.synchronized关键字2、Lock锁对象3、死锁4、线程协作(生产者消费者模式)1.线程通信2.线程通信-分析3.线程池3、线程同步1、三大不安全案例1.不安全的买票每个线程都在自己的内存交互,内存控制不当会造成数据不一... 查看详情

多线程四大经典案例及java多线程的实现(代码片段)

目录本节要点单例模式饿汉模式懒汉模式阻塞队列生产者消费者模型标准库中的就绪队列阻塞队列实现定时器定时器实现线程池实现线程池案例总结本节要点了解一些线程安全的案例学习线程安全的设计模型掌握单例模式,阻塞... 查看详情

java多线程与并发——生产者与消费者应用案例

多线程的开发中有一个最经典的操作案例,就是生产者-消费者,生产者不断生产产品,消费者不断取走产品。packagecom.vince;/***生产者与消费者案例*@authorAdministrator**/publicclassThreadDemo4{publicstaticvoidmain(String[]args){//TODO自动生成的方... 查看详情

多线程_多生产者多消费者的实现问题

  多生产者多消费者是Java中的一个经典的案例,采用等待唤醒机制来实现,代码如下:  publicclassProducerConsumer{publicstaticvoidmain(String[]args){Resourceres=newResource();Producerpro1=newProducer(res);Producerpro2=newProducer(res);Consume 查看详情

多线程生产者/消费者模式实现(代码片段)

参考书籍《java多线程编程核心技术》都是基于wait/notify实现的一个生产者和一个消费者:操作值1packagecom.qf.test10.pojo;23/**4*@authorqf5*@create2018-09-1815:596*/7publicclassEntity8publicstaticStringvalue="";91packagecom.qf.test10;23impor 查看详情

多线程--生产者/消费者线程模型(代码片段)

//程序演进1//threadloop,忙等Busywait//不断的检查是不是该做什么事情了;为了减少CPU占用,sleep睡眠一会//while(1)////do_something();//sleep(time);////程序演进2//while(1)////read_form_intput();//do_something();////程序员演进3,消息模型//while(wait 查看详情

threading多线程的生产者消费者模型(代码片段)

...篇请先看http://www.cnblogs.com/haiyan123/p/7445584.html"""多线程下生产者消费者模型。定义:在同一进程,同一主线程下,采用多线程完成多个任务的同时,各自数据保持干净整洁。即、花最少的时间完成最多的任务"""importthreadingimportrand... 查看详情

多线程-生产者消费者(代码片段)

正解博客:https://blog.csdn.net/u011863767/article/details/59731447永远在循环(loop)里调用wait和notify,不是在If语句现在你知道wait应该永远在被synchronized的背景下和那个被多线程共享的对象上调用,下一个一定要记住的问题就是,你应该... 查看详情

多线程案例-阻塞式队列

...它队列向队列中插入元素阻塞式队列的典型应用场景是"生产者消费者模型"2.生产者消费者模型生产者消费者模型通过一个容器来解决生产者和消费者的强耦合问题,生产者与 查看详情

多线程编程实践——实现生产者消费者模型(代码片段)

classClerkprivateintproducts;privateintmaximum;//最大储货量publicClerk(intmaxmum)this.maximum=maxmum;publicsynchronizedvoidaddProduct()if(products>=maximum)trywait();catch(InterruptedExceptione) 查看详情