`

生产者与消费者

阅读更多

 

import java.util.LinkedList;
import java.util.Queue;
import java.util.Random;

public class ProducerConsumerInJava {
	public static void main(String args[]) {
		System.out.println("在Java中如何使用wait和notify!!!");
		System.out.println("解决生产者消费者问题!!!");
		Queue<Integer> buffer = new LinkedList<>();
		int maxSize = 3;
		Thread consumer = new Consumer(buffer, maxSize, "消费者");
		Thread producer = new Producer(buffer, maxSize, "生产者");
		producer.start();
		consumer.start();
	}
}

class Producer extends Thread {
	private Queue<Integer> queue;
	private int maxSize;

	public Producer(Queue<Integer> queue, int maxSize, String name) {
		super(name);
		this.queue = queue;
		this.maxSize = maxSize;
	}

	@Override
	public void run() {
		while (true) {
			synchronized (queue) {
				while (queue.size() == maxSize) {
					try {
						System.out.println(
								"Queue已经满了,  Producer thread waiting for consumer to take something from queue");
						queue.wait();
					} catch (Exception ex) {
						ex.printStackTrace();
					}
				}
				Random random = new Random();
				int i = random.nextInt();
				System.out.println("Producing value : " + i);
				queue.add(i);
				queue.notifyAll();
			}
		}
	}
}

class Consumer extends Thread {
	private Queue<Integer> queue;
	private int maxSize;

	public Consumer(Queue<Integer> queue, int maxSize, String name) {
		super(name);
		this.queue = queue;
		this.maxSize = maxSize;
	}

	@Override
	public void run() {
		while (true) {
			synchronized (queue) {
				while (queue.isEmpty()) {
					System.out.println(
							"Queue 为空, Consumer thread is waiting  for producer thread to put something in queue");
					try {
						queue.wait();
					} catch (Exception ex) {
						ex.printStackTrace();
					}
				}
				System.out.println("Consuming value : " + queue.remove());
				queue.notifyAll();
			}
		}
	}
}

 

分享到:
评论

相关推荐

    生产者与消费者实验报告

    生产者与消费者模型主要包括两部分:生产者(Producer)和消费者(Consumer)。其中,生产者负责创建数据并将其放入缓冲区,而消费者则从缓冲区中取出数据进行处理。为了确保数据的正确性以及系统的高效运行,必须在...

    生产者与消费者生产者与消费者

    ### 生产者与消费者模型详解 #### 一、引言 生产者-消费者问题作为操作系统中的经典进程同步问题,自1965年由Edsger Dijkstra首次提出以来,一直是计算机科学领域研究的重要内容之一。它不仅展示了信号量机制的...

    pv操作解决生产者与消费者问题

    此外,pv操作还可以广泛应用于各种生产者消费者问题的解决中,使得系统更为可靠和高效。 pv操作是解决生产者与消费者问题的常用方法之一。通过pv操作,我们可以确保生产者进程和消费者进程之间的同步,避免数据的...

    生产者与消费者实验代码

    ### 生产者与消费者实验代码知识点解析 #### 一、实验背景与目的 生产者-消费者问题是一个经典的多线程同步问题,在计算机科学领域中,主要用于研究如何在多个线程之间进行协调工作的问题。该实验旨在通过编程实现...

    生产者与消费者的实验

    **生产者消费者问题的核心概念:** 1. **共享缓冲区**:这是生产者和消费者共享的关键资源。它是一个有限大小的存储区域,用于暂时存放产品。在本实验中,缓冲区的大小是固定的,因此必须管理好何时添加和取出产品...

    操作系统中生产者与消费者问题实例

    操作系统中的生产者与消费者问题是多线程编程中的一个经典模型,它主要研究的是如何有效地在共享资源之间协调生产者和消费者的行为,以避免数据竞争和死锁等问题。在这个C#编写的实例中,我们将深入探讨这个问题及其...

    进程同步实验——生产者与消费者问题算法实现

    在这个实验“进程同步实验——生产者与消费者问题算法实现”中,我们探讨了一个经典的并发问题:生产者-消费者问题。 生产者-消费者问题是多线程编程中的一种典型应用场景,模拟了实际生产流水线的过程。在这个问题...

    java生产者与消费者实验报告

    ### Java生产者与消费者模型详解 ...实验过程中,使用Eclipse IDE搭建开发环境,通过编写和调试代码,成功实现了三个生产者与三个消费者之间的数据同步交互,验证了生产者-消费者模式的有效性和可行性。

    操作系统课程设计——模拟生产者与消费者(java)

    生产者与消费者进程共享一个大小固定的缓冲区。其中,一个或多个生产者生产数据,并将生产的数据存入缓冲区,并有一个或多个消费者从缓冲区中取数据。 2、 系统设计: 系统的设计必须要体现进程之间的同步关系,...

    操作系统生产者与消费者问题Java简单模拟实现

    总的来说,"操作系统生产者与消费者问题Java简单模拟实现"这个项目提供了一个直观的多线程编程实例,帮助我们理解和实践Java中的线程同步技术,这对于理解和解决实际并发问题具有重要意义。通过分析这个项目,我们...

    操作系统课程设计生产者与消费者

    ### 操作系统课程设计:生产者与消费者问题详解 #### 一、问题背景与意义 在计算机科学领域,特别是操作系统理论中,“生产者-消费者”问题是一个非常经典的进程同步问题。这一问题最早由著名的计算机科学家Edsger...

    操作系统实验之进程的互斥与同步(生产者与消费者问题)VC++

    例如,在生产者与消费者问题中,有一个缓冲区作为共享资源,生产者将产品放入缓冲区,而消费者则从缓冲区取出产品。为了保证数据的一致性,必须确保在任何时候,缓冲区要么只允许一个生产者写入,要么只允许一个消费...

    操作系统实验生产者与消费者实验报告及代码

    根据给定的文件信息,以下是对“操作系统实验生产者与消费者实验报告及代码”的详细解析: ### 一、实验背景与目的 本次实验基于Windows操作系统环境,通过利用其提供的API函数来实现进程间的互斥与同步机制。实验...

    生产者与消费者问题(C++)

    在生产者与消费者问题中,可以使用两个信号量分别控制生产者和消费者对缓冲区的操作。 - **互斥锁**:另一种常见的同步机制,用于确保同一时间只有一个进程能够访问临界资源。在本例中,可以使用互斥锁来防止生产者...

    利用单线程完成的生产者与消费者程序

    然而,给定的标题“利用单线程完成的生产者与消费者程序”表明,这个程序是在单线程环境中实现的,这意味着没有并发线程,而是通过某种机制模拟了生产者和消费者的行为。 生产者-消费者模型通常用于处理数据流,...

    进程同步与互斥 生产者与消费者问题--操作系统大作业

    ### 进程同步与互斥:生产者与消费者问题 #### 一、基础知识与概念解析 **1.1 操作系统的基本概念** 操作系统(Operating System, OS)是计算机系统的核心软件,负责管理和协调计算机硬件资源及软件资源。它通过...

    Java生产者与消费者

    在Java编程中,"生产者与消费者"模式是一种经典的多线程问题,它涉及到了并发处理和资源管理。这个模式的核心思想是通过共享一个有限的缓冲区,使得生产者线程可以将产品放入缓冲区,而消费者线程则可以从缓冲区取出...

    生产者与消费者模式

    在生产者与消费者模式中,生产者模块负责创建数据,消费者模块则负责处理这些数据。两者之间通过一个缓冲区进行交互,这个缓冲区可以是队列、环形缓冲区或双缓冲区等形式。例如,在一个简单的寄信场景中,写信的人...

    操作系统生产者与消费者课程设计报告

    操作系统生产者与消费者课程设计报告

Global site tag (gtag.js) - Google Analytics