Java多线程 生产者消费者问题 (2)
2009-10-30 08:37
288 查看
一个使用了队列的通用实现:
http://blog.csdn.net/chaosllgao/archive/2009/05/23/4211183.aspx
此文描述了一种更简单的模型
1. 同时只有1个生产者和1个消费者
2. 不用队列,同时只有一个产品
3. 生产者每次生产1个0到100之间的随机数,消费者则把该随机数打印出来。如果产生的随机数为0,则生产者、消费者均退出运行
import java.util.Random;
public class ProducerConsumer
{
public static void main(String[] args)
{
Product product = new Product();
Producer producer = new Producer(product);
Consumer consumer = new Consumer(product);
producer.start();
consumer.start();
}
private static class Product
{
public int value = -1;
}
private static class Producer extends Thread
{
private Product product = null;
public Producer(Product product)
{
this.product = product;
}
public void run()
{
Random rand = new Random();
while (true)
{
try
{
synchronized (product)
{
//Must use "while" clause
while (product.value > 0)
{
product.wait();
}
product.value = rand.nextInt(101);
product.notifyAll();
if (product.value == 0)
{
break;
}
}
Thread.sleep(100);
}
catch (Exception e)
{
e.printStackTrace();
}
}
System.out.println();
System.out.println("Producer Terminated");
}
}
private static class Consumer extends Thread
{
private Product product = null;
public Consumer(Product product)
{
this.product = product;
}
public void run()
{
int i = 0;
while (true)
{
try
{
synchronized (product)
{
//Must use "while" clause
while (product.value < 0)
{
product.wait();
}
System.out.print(product.value + " ");
System.out.flush();
i++;
if (i % 10 == 0)
{
System.out.println();
}
product.notifyAll();
if (product.value == 0)
{
break;
}
product.value = -1;
}
Thread.sleep(100);
}
catch (Exception e)
{
e.printStackTrace();
}
}
System.out.println();
System.out.println("Consumer Terminated");
}
}
}
http://blog.csdn.net/chaosllgao/archive/2009/05/23/4211183.aspx
此文描述了一种更简单的模型
1. 同时只有1个生产者和1个消费者
2. 不用队列,同时只有一个产品
3. 生产者每次生产1个0到100之间的随机数,消费者则把该随机数打印出来。如果产生的随机数为0,则生产者、消费者均退出运行
import java.util.Random;
public class ProducerConsumer
{
public static void main(String[] args)
{
Product product = new Product();
Producer producer = new Producer(product);
Consumer consumer = new Consumer(product);
producer.start();
consumer.start();
}
private static class Product
{
public int value = -1;
}
private static class Producer extends Thread
{
private Product product = null;
public Producer(Product product)
{
this.product = product;
}
public void run()
{
Random rand = new Random();
while (true)
{
try
{
synchronized (product)
{
//Must use "while" clause
while (product.value > 0)
{
product.wait();
}
product.value = rand.nextInt(101);
product.notifyAll();
if (product.value == 0)
{
break;
}
}
Thread.sleep(100);
}
catch (Exception e)
{
e.printStackTrace();
}
}
System.out.println();
System.out.println("Producer Terminated");
}
}
private static class Consumer extends Thread
{
private Product product = null;
public Consumer(Product product)
{
this.product = product;
}
public void run()
{
int i = 0;
while (true)
{
try
{
synchronized (product)
{
//Must use "while" clause
while (product.value < 0)
{
product.wait();
}
System.out.print(product.value + " ");
System.out.flush();
i++;
if (i % 10 == 0)
{
System.out.println();
}
product.notifyAll();
if (product.value == 0)
{
break;
}
product.value = -1;
}
Thread.sleep(100);
}
catch (Exception e)
{
e.printStackTrace();
}
}
System.out.println();
System.out.println("Consumer Terminated");
}
}
}
相关文章推荐
- java多线程中的等待唤醒机制--多生产者多消费者问题
- JAVA多线程经典问题 -- 生产者 消费者 同步队列实现方法
- java多线程模拟生产者消费者问题,公司面试经常问的题。。。
- java多线程——生产者消费者问题
- java多线程之生产者消费者经典问题
- Java多线程解决生产者-消费者问题
- java多线程总结六:经典生产者消费者问题实现
- JAVA多线程经典问题 -- 生产者 消费者
- java多线程之生产者消费者经典问题 - 很不错的范例
- Java多线程模拟实现消费者生产者问题
- Java多线程解决生产者消费者问题
- Java多线程(2)生产者消费者问题(一)
- java多线程(同步和死锁,生产者和消费者问题)
- Java多线程之~~~使用Exchanger在线程之间交换数据[这个结合多线程并行会有解决很多问题]生产者消费者模型
- Java多线程: 生产者消费者问题(源码)
- Java多线程—生产者-消费者问题
- java多线程总结六:经典生产者消费者问题实现
- Java多线程生产者消费者说明等待唤醒机制问题和虚假唤醒问题
- java多线程之生产者和消费者问题
- Java多线程--生产者与消费者问题