package cn.perwu; //消费者与生产者例子介绍 wait(),notify(),notifyAll() //wait(),notify(),notifyAll()只能在同步方法或同步控制块中调用 class Disk { private int apple; // number=1 有苹果 number=0 无苹果 private int count;// 计数器,累计生产10个苹果后,结束 public int getCount() { return count; } public Disk(int apple) { this.apple = apple; } // 消费者调用消费苹果 public synchronized void takeApple() { String name = "(消费者)-- " + Thread.currentThread().getName(); if (apple == 0) { try { System.out.println(name + "【无】苹果,等待生产者生产!"); wait(); // 消费者释放锁,使生产者能够进入addApple() } catch (InterruptedException e) { e.printStackTrace(); } } else { System.out.println(name + "开始吃苹果-花费5秒!"); try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } apple--; System.out.println(name + "苹果吃完咯,唤醒生产者!"); notifyAll(); } } // 生产者调用生产苹果 public synchronized void addApple() { String name = "--(生产者)--" + Thread.currentThread().getName(); if (apple == 1) { try { System.out.println(name + "【有】苹果,等待消费者消费!"); wait(); // 生产者释放锁,使消费者能够进入takeApple() } catch (InterruptedException e) { e.printStackTrace(); } } else { System.out.println(name + "开始生产苹果-花费3秒!"); if (count < 10) { count++; } try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } apple++; System.out.println(name + "苹果做好咯,唤醒消费者!"); System.out.println(" ---- 计数器的值为 ----- " + count); notifyAll(); } } } class Producer implements Runnable { private Disk d; public Producer(Disk d) { this.d = d; } public void run() { while (d.getCount() < 10) { d.addApple(); } } } class Consumer implements Runnable { private Disk d; public Consumer(Disk d) { this.d = d; } public void run() { while (d.getCount() < 11) { d.takeApple(); } } } public class TestPC { public static void main(String[] args) { Disk d = new Disk(0); // 初始化盘子为0个苹果 new Thread(new Consumer(d), "Consumer").start(); // 启动消费者线程 new Thread(new Producer(d), "Producer").start(); // 启动生产者线程 } }
相关推荐
在并发编程中,"生产者-消费者"模式是一种经典的解决问题的范式,用于协调两个或更多线程间的协作,其中一部分线程(生产者)生成数据,另一部分线程(消费者)消费这些数据。 生产者-消费者模型的核心在于共享资源...
本示例中的“生产者-消费者”模型是一种经典的多线程问题,它模拟了实际生产环境中的资源分配与消耗过程。下面我们将详细探讨如何在Java中实现这个模型。 首先,我们要理解生产者-消费者模型的基本概念。在这个模型...
java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型...
用java多线程,实现生产者消费者同步和互斥的问题,操作系统中的经典问题
生产者消费者模式是一种设计模式,它描述了两个不同类型的线程如何协作完成工作:生产者负责生成数据,而消费者负责消耗这些数据。为了使这个模式在多线程环境下安全运行,我们需要使用Java中的同步机制。 1. **...
java多线程学习,生产者消费者问题示例
总之,Java中的生产者-消费者模式是多线程编程中解决数据共享和同步问题的有效手段,通过合理利用`BlockingQueue`等并发工具类,我们可以构建高效、稳定的多线程应用。在开发过程中,了解和掌握这种模式有助于提高...
本项目通过一个生产者消费者问题的实例,展示了如何在Java中实现线程间的同步与互斥。 生产者消费者问题是经典的并发问题之一,它涉及到两个类型的线程:生产者和消费者。生产者负责生成数据(产品),而消费者则...
Java多线程编程是开发高并发、高性能应用的关键技术之一,而生产者消费者模式是多线程编程中常用的一种设计模式。它通过分离数据的生产和消费过程,实现了线程间的协同工作,有效避免了资源的竞争和浪费。在这个模式...
Java多线程生产者消费者模型是一种典型的线程协作模式,用于解决并发编程中资源的高效利用和同步问题。在这个模型中,"生产者"线程负责生成数据,而"消费者"线程则负责处理这些数据。为了实现这种模式,Java提供了...
java 多线程 生产者消费者模式,多个生产者对多个消费者,使用jdk 线程池及 BlockingQueue实现,解决了待生产的任务生产完成后,正常终止所有线程,避免线程(特别是消费者线程)因阻塞而无限等待的情况。源码中还简单...
在实际应用中,我们常常会遇到一种典型的多线程问题——生产者消费者模型。这个模型描述了两种类型的线程:生产者线程负责创建或生产资源,而消费者线程则负责消耗这些资源。在Java中,我们可以利用同步机制来实现...
生产者消费者模式是一种经典的多线程同步问题解决方案,它源于现实世界中的生产流水线,用于描述生产者(Producer)和消费者(Consumer)之间的协作关系。在这个模式中,生产者负责生成产品并放入仓库,而消费者则从...
java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现...
基本满足操作系统课上要求,java实现的生产者消费者模型。
### 由生产者/消费者问题深入理解JAVA多线程 #### 生产者/消费者问题概述 生产者/消费者问题是一个经典的计算机科学问题,用于展示进程间的通信与同步问题。在这个模型中,生产者负责创建数据并将其放置到共享内存...
关于java多线程的东西,里面有生产者与消费者的案例,感兴趣的朋友看一下吧。
Java多线程生产者消费者基础示例,IT大厂如华为等基础面试中经常出现的Java基础笔试题目,使用最基本的线程同步、Notify及wait等实现最基本的生产者消费者例程,适用于Java编程初学者了解多线程、同步块、线程安全、...
综上所述,这个"操作系统课程设计多线程 生产者消费者问题"项目将涵盖Java多线程编程、并发控制、线程安全的数据结构和通信机制等多个重要知识点,对理解并发编程有极大的实践价值。在实际操作中,需要综合运用这些...