`

利用阻塞队列BlockingDeque实现生产者-消费者模式

阅读更多
import java.util.concurrent.BlockingDeque;
import java.util.concurrent.LinkedBlockingDeque;

/**
 * 消费者类
 * */
public class Consumer implements Runnable {
	private BlockingDeque<String> queue = new LinkedBlockingDeque<String>();
	
	public Consumer(BlockingDeque<String> queue){
		this.queue = queue;
	}
	@Override
	public void run() {
		// TODO Auto-generated method stub
		int i = 0;
			do{
				try {
					String product = queue.take();
					if(!"".equals(product) && null != product){
						System.out.println("消费者-:"+product);
						i++;
					}
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
		
			}while(i < 50);
		}
}

import java.util.concurrent.BlockingDeque;
import java.util.concurrent.LinkedBlockingDeque;
/**
 * 生产者类
 * */

public class Producer implements Runnable {
	private BlockingDeque<String> queue = new LinkedBlockingDeque<String>();
	
	public Producer(BlockingDeque<String> queue){
		this.queue = queue;
	}
	@Override
	public void run() {
		// TODO Auto-generated method stub
		for(int i=0; i < 50; i++){
			try {
				System.out.println("生产者-Product"+i);
				queue.put("Prodect:"+i);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}

}

import java.util.concurrent.BlockingDeque;
import java.util.concurrent.LinkedBlockingDeque;

/**
 * 测试类
 * */
public class BlockingQueueTest {
	
	private static BlockingDeque<String> queue = new LinkedBlockingDeque<String>();
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Producer producer = new Producer(queue);
		Consumer cusumer = new Consumer(queue); 
		new Thread(cusumer).start();
		new Thread(producer).start();
	}
}
分享到:
评论

相关推荐

    OS大作业生产者消费者同步问题的实现

    操作系统实践大作业:使用POSIX条件变量和互斥锁实现生产者、消费者同步问题,缓冲区空时消费者不能消费,当有生产者生产产品后唤醒阻塞的消费者;缓冲区满时生产者不能生产,当有消费者消费产品后唤醒阻塞的生产者...

    编程实现生产者消费者或读写者的同步问题

    生产者线程和消费者线程。生产者线程生产物品,然后将物品放置在一个空缓冲区中供消费者线程消费。消费者线程从缓冲区中获得物品,然后释放缓冲区。生产者线程生产物品时,若无空缓冲区可用,生产者线程必须等待消费...

    生产者消费者实现进程的互斥和同步

    生产者线程生产物品,然后将物品放置在一个空缓冲区中供消费者线程消费。消费者线程从缓冲区中获得物品,然后释放缓冲区。生产者线程生产物品时,若无空缓冲区可用,生产者线程必须等待消费者线程释放出一个空缓冲区...

    Java并发编程:阻塞队列

     使用非阻塞队列的时候有一个很大问题是:它不会对当前线程产生阻塞,那么在面对类似消费者-生产者的模型时,必须额外地实现同步策略以及线程间唤醒策略,这个实现起来非常麻烦。但是有了阻塞队列不一样了,它会

    阻塞队列实现生产者消费者模式Java开发Java经验技巧共

    阻塞队列实现生产者消费者模式Java开发Java经验技巧共4页.pdf.zip

    java模拟生产者和消费者问题

    用java模拟生产者和消费者在缓冲区间的阻塞情况。

    计算机操作系统课程设计报告《生产者---消费者问题》.doc

    生产者和消 费者彼此之间不直接通讯,而通过阻塞队列来进行通讯,所以生产者生产完数据之后不 用等待消费者处理,直接扔给阻塞队列,消费者不找生产者要数据,而是直接从阻塞队 列里取,阻塞队列就相当于一个缓冲区...

    使用VC++6.0实现的“操作系统”课程中的生产者-消费者问题

    一、原理 生产者线程: while (true) ...可以选择菜单项“开启线程-&gt;加快(减慢)生产,减慢(加快)消费”来随机调整生产和消费的时间,以观察生产者或消费者线程阻塞的状况。 程序在VC++6.0下编译通过。

    消息分发框架(基于JAVA阻塞队列实现、 生产者消费者模型)

    消息分发框架,基于java阻塞队列实现,生产者消费者模型 可用于任务分发,服务器消息消息,以及网络IO 性能优化,多线程

    【Java】Queue、BlockingQueue和队列实现生产者消费者模式

    源码:BlockingQueue实现生产者消费者模式→ 输出结果截图 1. Queue接口 – 队列 public interface Queue extends Collection Collection的子接口,表示队列FIFO(First In First Out) 常用方法: (1)抛出异常...

    java模拟阻塞队列

    实现java模拟阻塞队列的例子,该代码包括,阻塞队列实现生产者,消费者。和模拟阻塞队列实现生产者及消费者模式,帮助你更好的理解java多线程

    操作系统课设-生产者消费者问题.zip

    本程序模拟实现了“生产者-消费者”问题的解决过程,用图形界面动态演示了P、V操作过程以及生产者、消费者进程之间的工作流程。 本程序使用的算法是典型的P、V操作使用信号量解决“生产者-消费者”问题。 本程序在...

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

    生产者与消费者问题的实现。创建一组“生产者”线程和一组“消费者”线程,并建立一个长度为N的全局数组作为共享缓冲区。“生产者”向缓冲区输入数据,“消费者”从缓冲区读出数据。当缓冲区满时,“生产者”必须...

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

    生产者-消费者问题是一个经典的进程同步问题,该问题最早由Dijkstra提出,用以演示他提出的信号量机制。本作业要求设计在同一个进程地址空间内执行的两个线程。生产者线程生产物品,然后将物品放置在一个空缓冲区中...

    生产者/消费者模式 阻塞队列 LinkedBlockingQueue

    NULL 博文链接:https://xiongjiajia.iteye.com/blog/2325943

    生产者与消费者问题程序

    生产者-消费者问题是一个经典的进程同步问题,该问题最早由Dijkstra提出,用以演示他提出的信号量机制。在同一个进程地址空间内执行的两个线程。生产者线程生产物品,然后将物品放置在一个空缓冲区中供消费者线程...

    生产者消费者问题代码

    生产者-消费者问题是一个经典的进程同步问题,该问题最早由Dijkstra提出,用以演示他提出的信号量机制。本作业要求设计在同一个进程地址空间内执行的两个线程。生产者线程生产物品,然后将物品放置在一个空缓冲区中...

    华南理工大学操作系统实验:生产者消费者问题

    参考教材中的生产者消费者算法,创建5个进程,其中两个进程为生产者进程,3个进程为消费者进程。一个生产者进程试图不断地在一个缓冲中写入大写字母,另一个生产者进程试图不断地在缓冲中写入小写字母。3个消费者...

    C++消费者-生产者.rar

    生产者—消费者:在同一个进程地址空间内执行的两个线程生产者线程生产物品,然后将物品放置在一个空缓冲区中供消费者线程消费。消费者线程从缓冲区中获得物品,然后释放缓冲区。当生产者线程生产物品时,如果没有空...

    生产者与消费者 进程的同步与互斥模拟

    // 把就绪队列里的进程放入生产者队列的尾部 void signalempty() bool waitfull() void signalfull() void producerrun() void comsuerrun() void main() { processproc(); element=hasElement(readyhead); ...

Global site tag (gtag.js) - Google Analytics