`

Producer consumer

阅读更多
package Thread;

public class PC {
    int count;
    int max = 20;
    boolean start = true;
    protected Object mutex=new Object();

    public void produce() {
        count++;
        System.out.println("produce 1 ,total = " + count);
    }

    public void consume() {
        count--;
        System.out.println("consume 1 ,total = " + count);
    }

    public void makeProducer() {
        (new Thread() {
            public void run() {
                synchronized (mutex) {
                    while (start) {
                        if (count < max) {
                            produce();
                            mutex.notifyAll();
                        } else {
                            System.out.println("max");
                            try {
                                mutex.wait();
                            } catch (InterruptedException e) {
                                e.printStackTrace();
                            }
                        }
                    }
                }
            }
        }).start();
    }

    public void makeConsumer() {
        (new Thread() {
            public void run() {
                synchronized (mutex) {
                    while (start) {
                        if (count > 0) {
                            consume();
                            mutex.notifyAll();
                        } else {
                            System.out.println("none");
                            try {
                                mutex.wait();
                            } catch (InterruptedException e) {
                                e.printStackTrace();
                            }
                        }
                    }
                }

            }
        }).start();
    }

    public void stop() {
        start = false;
    }

    public static void main(String[] args) throws Exception {
        PC a = new PC();
        a.makeProducer();
        a.makeConsumer();
        Thread.sleep(10000);
        a.stop();
    }
}

 

分享到:
评论

相关推荐

    ProducerConsumer(生产者消费者问题的单线程模拟)

    std::thread consumerThread(consumer, std::ref(sharedQueue), std::ref(mutex), std::ref(cv)); producerThread.join(); consumerThread.join(); return 0; } ``` 在这个例子中,生产者和消费者通过互斥量和...

    57119101_王晨阳_ProducerConsumer1

    在这个实验中,57119101_王晨阳_ProducerConsumer1通过Win32 API和Pthreads两种方式实现了这一问题的解决方案。 在实验目的部分,目标是理解并掌握Win32 API中的mutex锁和信号量(semaphores)的使用,以及如何利用...

    ProducerConsumer-CSharp:C# 制作的 ProducerConsumer Demo

    ProducerConsumer 模型是计算机科学中的一个经典设计模式,它主要解决了多线程环境下的资源同步和通信问题。在 C# 中,我们可以利用 .NET Framework 提供的并发和线程管理工具来实现这个模型。本项目 "Producer...

    Producer/Consumer 多线程处理文件

    在这个"Producer/Consumer 多线程处理文件"的主题中,我们将深入探讨Java中的生产者消费者模型,以及如何利用这一模式来高效地处理大量数据,如一秒钟处理一千多条记录。 生产者消费者模型源于操作系统理论,是解决...

    ProducerConsumer.java

    The use of producer-consumer questions helps to better understand threads.

    consumer_producer_operatingsystems_producerconsumer_

    1、n个缓冲区的缓冲池作为一个临界资源:当生产者任务从数据源—文件中读取数据后将会申请一个缓冲区,并将此数据放缓冲区中。消费者任务从一个缓冲区中取走数据,并将其中的内容打印输出。当一个生产者任务正在访问...

    ProducerConsumer.rar

    生产者消费者代码

    ProducerConsumer:使用java实现经典的并发或线程模式

    在给定的"ProducerConsumer"项目中,开发者可能使用了Java提供的并发工具类来实现这一模式。在"简化"分支中,代码被优化以提高可读性,而在"master"分支中,我们可以看到更完整的实现,更易于理解生产者消费者模式的...

    ProducerConsumer

    "ProducerConsumer"是一个基于Java和SpringBoot框架的生产者/消费者问题的应用实例。生产者/消费者问题是多线程编程中的经典问题,它涉及到如何在多个线程之间共享资源,以避免数据竞争和提高效率。在这个示例中,...

    MultiThreadExercise:Java MultiThread练习代码,包括ReaderWriter,BlockingQueue,ProducerConsumer等的实现

    本项目"MultiThreadExercise"提供了丰富的Java多线程练习,涵盖了ReaderWriter、BlockingQueue和ProducerConsumer等经典并发模式的实现。下面我们将深入探讨这些知识点。 首先,**ReaderWriter**模式是一种用于解决...

    producerconsumer

    总结来说,"producerconsumer"这个主题探讨的是如何在多线程环境中有效地管理共享资源,以达到生产者和消费者的协作。在C语言中,这通常通过使用信号量来实现。理解并掌握这种问题解决策略对于编写高效、可靠的并发...

    example_posix:ProducerConsumer 问题使用(POSIX 信号量和线程)

    生产者/消费者问题使用(POSIX 信号量和线程) 获取文件: 在实验室计算机上,使用以下命令: ...课程: 创建和管理 POSIX 线程和信号量。 从多个 POSIX 线程访问共享(进程内)内存。 美味的早餐麦片... ...

    node-producer-consumer:NodeJS 中的 ProducerConsumer 问题

    在这个系统中,Producer/Generator 将发送一系列随机算术表达式(为了好玩而采用反向波兰表示法)。 Consumer/Evaluator 将接受这些表达式,计算结果,然后将解决方案报告给 Generator 或任何正在倾听的人。 ...

    Springboot集成Kafka实现producer和consumer的示例代码

    1. **生产者(Producer)**: 生产者是向 Kafka 集群发布消息的应用程序。在 Spring Boot 中,可以通过 `KafkaTemplate` 或自定义配置来发送消息。 2. **消费者(Consumer)**: 消费者从 Kafka 集群中读取消息并处理...

    Flex基于Producer和Consumer方式的简易消息推送机制

    Flex中的消息推送机制是基于Producer和Consumer模型实现的,这种机制允许应用程序实时地发送和接收消息,常用于构建聊天室、通知系统等实时交互的应用。下面将详细解释Flex消息推送的相关知识点。 1. **Producer与...

    android-thread-producer-consumer-example:线程之间的ProducerConsumer模型示例

    在讲完Looper,Handler和HandlerThread一章之后,一位学生问我们如何将流数据(从传感器)从后台线程传递回主线程(UI)? 对于此用例, HandlerThread原因如下: 我们的后台线程只是在做一件事:读取传感器数据。...

    producer_consumer_v2.c

    别人的太贵了,自己写一份分享!c语言实现生产者消费者模型,支持设置生产者消费者线程数量,支持设置消息数量。消息的组织形式为链表。生产者生产消息和消费者处理消息分别需要对应的条件变量。...

    rabbit_mq::rabbit:建立一致且均衡的ProducerConsumer管道

    在IT行业中,消息队列(Message Queue)是一种重要的中间件技术,用于解耦生产者(Producer)和消费者(Consumer)之间的通信,使得系统能够更好地扩展和处理异步任务。RabbitMQ作为一款广泛使用的开源消息代理,...

Global site tag (gtag.js) - Google Analytics