Java多线程解决生产者消费者问题
2014-08-30 13:21
288 查看
public class ProducerConsumer { static final int MAXBUFFER=100; static Producer producer=new Producer(); static Consumer consumer=new Consumer(); static Monitor monitor=new Monitor(); public static void main(String[] args) { producer.start(); consumer.start(); } static class Producer extends Thread{ public void run(){ int item=0; while(true){ //produceAction() System.out.println("Producer insert "+item+" into buffer "+monitor.count); monitor.insert(item); } } } static class Consumer extends Thread{ public void run(){ int item; while(true){ item=monitor.remove(); //consumeAction() System.out.println("Consumer remove "+item+" from buffer "+monitor.count); } } } //管程 static class Monitor{ int []buffer=new int[MAXBUFFER]; private int count=0,low=0,high=0; public synchronized void insert(int val){ //if buffer is full,then go to sleep if(count==MAXBUFFER) goToSleep(); buffer[high]=val; high=(high+1)%MAXBUFFER; count++; //notify consumer if(count==1) notify(); } public synchronized int remove(){ int val; if(count==0) goToSleep(); val=buffer[low]; low=(low+1)%MAXBUFFER; count--; if(count==MAXBUFFER-1) notify(); return val; } private void goToSleep(){ try{ wait(); } catch (Exception e) { }; } } }
相关文章推荐
- Java多线程解决生产者-消费者问题
- Java多线程之~~~使用Exchanger在线程之间交换数据[这个结合多线程并行会有解决很多问题]生产者消费者模型
- java多线程总结六:经典生产者消费者问题实现
- 用条件变量和信号量解决生产者和消费者问题
- 使用互斥锁解决生产者与消费者问题
- Java多线程: 生产者消费者问题(源码)
- java解决单缓冲生产者消费者问题示例
- unp2 14 使用线程和互斥锁解决消费者生产者问题
- 1,使用信号量解决生产者-消费者问题
- 使用互斥锁解决生产者与消费者问题
- java多线程总结六:经典生产者消费者问题实现
- java多线程之生产者消费者问题
- windows操作系统中用信号量机制解决生产者消费者问题
- 用线程解决生产者消费者问题
- java信号量PV操作 解决生产者-消费者问题
- 黑马程序员 利用Lock Condition解决多生产者多消费者问题的实例
- 用信号量做进程同步解决生产者和消费者遇到的奇怪问题
- Java多线程 生产者消费者问题 (2)
- 用C#多线程解决生产者-消费者问题
- 多线程(线程间通信-多生产者多消费者问题-JDK1.5解决办法-范例),停止线程,线程中方法的区别,匿名内部类实现多线程,线程总结