`
心痛泪流
  • 浏览: 12407 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Java多线程,生产者消费者问题!

阅读更多
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多线程经典模型生产者消费者java多线程经典模型...

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

    用java多线程,实现生产者消费者同步和互斥的问题,操作系统中的经典问题

    java多线程(生产者与消费者)

    生产者消费者模式是一种设计模式,它描述了两个不同类型的线程如何协作完成工作:生产者负责生成数据,而消费者负责消耗这些数据。为了使这个模式在多线程环境下安全运行,我们需要使用Java中的同步机制。 1. **...

    java多线程生产者消费者问题示例

    java多线程学习,生产者消费者问题示例

    Java多线程 生产者-消费者模式

    总之,Java中的生产者-消费者模式是多线程编程中解决数据共享和同步问题的有效手段,通过合理利用`BlockingQueue`等并发工具类,我们可以构建高效、稳定的多线程应用。在开发过程中,了解和掌握这种模式有助于提高...

    JAVA实现线程间同步与互斥生产者消费者问题

    本项目通过一个生产者消费者问题的实例,展示了如何在Java中实现线程间的同步与互斥。 生产者消费者问题是经典的并发问题之一,它涉及到两个类型的线程:生产者和消费者。生产者负责生成数据(产品),而消费者则...

    java 多线程 生产者消费者模式

    Java多线程编程是开发高并发、高性能应用的关键技术之一,而生产者消费者模式是多线程编程中常用的一种设计模式。它通过分离数据的生产和消费过程,实现了线程间的协同工作,有效避免了资源的竞争和浪费。在这个模式...

    java 多线程生产者消费者模型demo

    Java多线程生产者消费者模型是一种典型的线程协作模式,用于解决并发编程中资源的高效利用和同步问题。在这个模型中,"生产者"线程负责生成数据,而"消费者"线程则负责处理这些数据。为了实现这种模式,Java提供了...

    java 多线程 生产者消费者模式源码

    java 多线程 生产者消费者模式,多个生产者对多个消费者,使用jdk 线程池及 BlockingQueue实现,解决了待生产的任务生产完成后,正常终止所有线程,避免线程(特别是消费者线程)因阻塞而无限等待的情况。源码中还简单...

    java多线程实现生产者消费者关系

    在实际应用中,我们常常会遇到一种典型的多线程问题——生产者消费者模型。这个模型描述了两种类型的线程:生产者线程负责创建或生产资源,而消费者线程则负责消耗这些资源。在Java中,我们可以利用同步机制来实现...

    多线程简易实现生产者消费者模式

    生产者消费者模式是一种经典的多线程同步问题解决方案,它源于现实世界中的生产流水线,用于描述生产者(Producer)和消费者(Consumer)之间的协作关系。在这个模式中,生产者负责生成产品并放入仓库,而消费者则从...

    java实现多线程经典模型生产者消费

    java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现...

    操作系统:多线程处理生产者消费者,java实现

    基本满足操作系统课上要求,java实现的生产者消费者模型。

    由生产者/消费者问题看JAVA多线程

    ### 由生产者/消费者问题深入理解JAVA多线程 #### 生产者/消费者问题概述 生产者/消费者问题是一个经典的计算机科学问题,用于展示进程间的通信与同步问题。在这个模型中,生产者负责创建数据并将其放置到共享内存...

    java多线程生产者与消费者案例

    关于java多线程的东西,里面有生产者与消费者的案例,感兴趣的朋友看一下吧。

    Java多线程生产者消费者例程

    Java多线程生产者消费者基础示例,IT大厂如华为等基础面试中经常出现的Java基础笔试题目,使用最基本的线程同步、Notify及wait等实现最基本的生产者消费者例程,适用于Java编程初学者了解多线程、同步块、线程安全、...

    操作系统课程设计多线程 生产者消费者问题

    综上所述,这个"操作系统课程设计多线程 生产者消费者问题"项目将涵盖Java多线程编程、并发控制、线程安全的数据结构和通信机制等多个重要知识点,对理解并发编程有极大的实践价值。在实际操作中,需要综合运用这些...

Global site tag (gtag.js) - Google Analytics