`
BBjava
  • 浏览: 125420 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

生产者-消费者(java并发)

阅读更多
首先是Productor.java
package org.iteye.bbjava.currency.pc;


public class Productor implements Runnable {

	CQueue<String> queue;
	int i = 0;

	public Productor(CQueue<String> queue) {
		this.queue = queue;
	}

	@Override
	public void run() {
		while (!Thread.interrupted()) {
			if (queue.size() > 200) {
					System.out.println("仓库满了,productor 休息一下");
			} else {
				
				try {
					System.out.println(".");
					Thread.sleep(500);
					queue.add(""+i++);
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			
			}

		}
	}


}


接下来是仓库 CQueue.java
package org.iteye.bbjava.currency.pc;

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

public class CQueue<T> {

	public Queue<T> queue = new LinkedList<T>(); ;
	
	public CQueue(){
		
	}
	
	public synchronized T poll() { //consumer 从仓库取出产品
		if(queue.size() <= 0 ){
			try {
				System.out.println("仓库空了,里面没东西,consumer 休息一下 size:"+queue.size());
				wait(1200);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			notify();
		}
		return queue.poll();
	}
	
	public synchronized void add(T elem){
		if(queue.size() >= 200){
			try {
				System.out.println("仓库满了,容不下更多东西了,productor 休息一下 size:"+queue.size());
				wait(1200);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}

		}else{
			queue.add(elem);
			notify();
		}
	}
	
	public int size(){
		return queue.size(); 
	}

}


再者是Consumer.java
package org.iteye.bbjava.currency.pc;

import java.util.Queue;

public class Consumer implements Runnable {
	
	CQueue<String> queue;
	
	
	@Override
	public void run() {
		while (!Thread.interrupted()) {
			if (queue.size() < 0) {
				System.out.println("仓库空了,consumer 休息");
				
			} else {
				try {
					Thread.sleep(500);
					System.out.println(this.consume());
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				
			}

		}

	}
	
	public Consumer(CQueue<String> queue) {
		this.queue = queue ;
	}
	
	public String consume(){
		return this.queue.poll();
	}
}


客户端 TestProductorAndConsumer .java

package org.iteye.bbjava.currency.pc;

public class TestProductorAndConsumer {

	public static void main(String []args){
		
		CQueue<String> cq = new CQueue<String>();
		System.out.println(cq.size());
		Thread t2 = new Thread(new Productor(cq));
		Thread t3 = new Thread(new Productor(cq));
		Thread t1 = new Thread(new Consumer(cq));
		Thread t4 = new Thread(new Consumer(cq));
		
		t4.start();
		t3.start();
		t2.start();
		t1.start();
	
		
	}
}


生产者与消费者,纯回顾一下,手写的,主要是加深印象。

待整理……
分享到:
评论

相关推荐

    模拟“生产者-消费者”解决过程及方法

    "生产者-消费者"问题是一种经典的多线程同步问题,源于计算机科学中的操作系统领域,用于描述在并发环境中如何协调生产者和消费者之间的操作,确保数据的一致性和避免资源浪费。这个问题的基本设定是有一个共享缓冲...

    Java多线程实现生产者消费者

    这就是一个基本的Java“生产者-消费者”模型实现。通过这样的设计,我们可以有效地控制生产者和消费者的执行顺序,确保了数据的正确性,并且避免了先消费后生产的情况。在实际应用中,可能需要根据具体需求进行优化...

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

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

    并发控制-生产者-消费者问题

    在计算机科学中,"并发控制-生产者-消费者问题"是一个经典的多线程同步问题,它涉及到了进程通信和资源管理。这个问题的核心在于确保生产者(生成数据的线程)和消费者(消耗数据的线程)能够有效地共享一个有限...

    模拟生产者消费者问题(java)

    在计算机科学中,生产者-消费者问题是多线程并发控制中的一个经典问题。它描述了两个不同的线程,生产者负责生成数据,而消费者则负责消耗这些数据。在这个Java实现中,我们将探讨如何使用Java的并发工具来解决这个...

    JAVA_生产者-消费者

    在Java编程中,"生产者-消费者"模式是一种经典的多线程问题,它涉及到了并发处理和资源管理。这个模式的主要目标是通过分离生产数据和消费数据的过程,提高系统的效率和灵活性。在这个模式中,"生产者"负责生成数据...

    用多线程同步方法解决生产者-消费者问题

    生产者-消费者问题是这种并发模型的一个经典案例,它涉及到如何在多个线程间共享资源,确保数据的一致性和正确性。在这个场景中,生产者线程负责生成数据并放入一个有限的缓冲区,而消费者线程则负责从缓冲区取出...

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

    在多道程序环境下,进程同步问题十分重要,通过解决“生产者-消费者”问题,可以帮助我们更好的理解进程同步的概念及实现方法。掌握线程创建和终止的方法,加深对线程和进程概念的理解,会用同步与互斥方法实现线程...

    java多线程实现生产者和消费者

    在并发编程中,"生产者-消费者"模式是一种经典的解决问题的范式,用于协调两个或更多线程间的协作,其中一部分线程(生产者)生成数据,另一部分线程(消费者)消费这些数据。 生产者-消费者模型的核心在于共享资源...

    生产者-消费者.zip

    "生产者-消费者"模式是一种经典的并发设计模式,广泛应用于解决数据处理中的异步问题。本项目提供了一个简单的Java实现,帮助开发者理解如何在实际场景中运用这种模式。 生产者-消费者模式的核心思想是共享资源...

    JAVA课程设计(生产者-消费者问题)

    【JAVA课程设计(生产者-消费者问题)】是学习多线程编程的一个经典案例,它主要探讨了如何在并发环境中有效地管理和协调生产者线程和消费者线程的交互。在这个设计中,生产者负责生成产品并放入共享资源区,而消费...

    生产者-消费者多线程处理

    总之,"生产者-消费者"多线程处理是一个核心的并发编程概念,它展示了如何在多线程环境中有效地管理和共享资源,以实现高效的程序执行。理解并正确实现这一模式对于任何从事并发编程或系统设计的IT专业人员来说都至...

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

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

    计算机课程设计 操作系统生产者-消费者问题

    该问题的提出是为了研究 Linux 的进程机制和信号量的实现生产者消费者问题的并发控制。通过研究该问题,可以深入了解操作系统的设计思想和实现方法。 生产者-消费者问题的定义 生产者-消费者问题是一种同步问题的...

    procon.rar_ProCon.d_生产 者- 消费者 问题_生产者

    生产者-消费者问题是一个经典的多线程同步问题,它源于计算机科学中的并发编程领域。这个问题由计算机科学家Edsger W. Dijkstra提出,主要探讨如何在多线程环境下有效地管理和控制资源的生产和消费,以避免数据竞争...

    基于JAVA线程机制研究生产者-消费者问题.pdf

    在Java中实现生产者-消费者问题不仅能够加深对Java多线程编程的理解,还能够锻炼出良好的并发编程思维,这对于未来在软件工程和系统开发等领域的工作至关重要。 总之,基于Java线程机制研究生产者-消费者问题,通过...

    生产者-消费者.doc

    为使生产者进程与消费者进程能并发执行,在两者之间设置了一个具有 n 个缓冲区的缓冲池:生产者进程从文件中读取一个数据,并将它存放到一个缓冲区中;消费者进程从一个缓冲区中取走数据,并输出此数据。 四、实验...

    consumer_producer.rar_操作系统_生产 消费_生产者-消费者问题_进程调度

    在操作系统领域,生产者-消费者问题是多线程和进程同步的经典模型,用于描述并发执行的生产者进程与消费者进程如何共享资源而不会产生数据竞争或死锁的现象。在这个问题中,生产者负责生成数据,而消费者则负责消费...

    基于JAVA线程机制研究生产者-消费者问题.zip

    在Java编程中,线程是并发执行的基本单元,它允许程序在同一时间处理多个任务。生产者-消费者问题是多线程编程中的...生产者-消费者问题的解决方式不仅有助于提升程序的并发能力,还能够加深对Java线程同步机制的理解。

Global site tag (gtag.js) - Google Analytics