Java实现生产者消费者的学习实例
2016-11-20 15:22
330 查看
package ProducerConsumer; /** * 生产者(Productor)将产品交给店员(Clerk),而消费者(Customer)从店员处取走产品,店员一次只能持有固定数量的产品(比如:20), * 如果生产者试图生产更多的产品,店员会叫生产者停一下,如果店中有空位放产品了再通知生产者继续生产; * 如果店中没有产品了,店员会告诉消费者等一下,如果店中有产品了再通知消费者来取走产品 * */ //问题分析: //1、是否涉及到多线程问题? 是,生产者、消费之 //2、是否涉及到共享数据? 是考虑线程安全问题 //3、此共享数据是谁?产品的数量 //4、是否涉及到线程的通信? 是 存在这生成者和消费者的通信 public class TestProcucerConsumer { public static void main(String[] args) { Clerk c = new Clerk(); Producer p1 = new Producer(c); Consumer c1 = new Consumer(c); Thread t1 = new Thread(p1); Thread t2 = new Thread(c1); t1.setName("生产者"); t2.setName("消费者"); t1.start(); t2.start(); } } class Clerk{//店员 int product;//产品数量,默认值为0 public synchronized void addProduct(){//存在同步,则写为同步方法synchronized System.out.println(Thread.currentThread().getName() + ":" + product); if(product >= 20){ try { wait();//线程的通信 } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } }else{ product++; notifyAll();//线程的通信 } } public synchronized void consumeProduct(){//存在同步,则写为同步方法synchronized System.out.println(Thread.currentThread().getName() + ":" + product); if(product <= 0){ try { wait();//线程的通信 } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } }else{ product--; notifyAll();//线程的通信 } } } class Producer implements Runnable{//生成者 Clerk clerk; public Producer(Clerk clerk){ this.clerk = clerk; } public void run(){ System.out.println("生成者开始生产产品:"); while(true){ try { Thread.currentThread().sleep(100); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } clerk.addProduct(); } } } class Consumer implements Runnable{ Clerk clerk; public Consumer(Clerk clerk){ this.clerk = clerk; } public void run(){ System.out.println("消费者消费产品:"); while(true){ try { Thread.currentThread().sleep(50); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } clerk.consumeProduct(); } } }
相关文章推荐
- Java多线程学习之 BlockingQueue实现生产者和消费者模型
- java并发学习之BlockingQueue实现生产者消费者详解
- Java 多线程学习之生产者消费者模型:一个较完善的实现
- 生产者和消费者问题学习以及Java实现
- Java 线程同步问题 生产者-消费者 算法实现 -Java学习笔记(29)
- 基于java多线程来实现生产者和消费者的实例
- java并发学习之BlockingQueue实现生产者消费者
- 用java实现的生产者与消费者多线程同步互斥模型
- JAVA消费者与生产者模型的几个不同实现
- 经典多线程Java实例 生产者与消费者
- java多线程总结六:经典生产者消费者问题实现
- JAVA多线程模拟生产者与消费者_实例
- java生产者和消费者问题之售票实现方法
- 用JAVA 实现“生产者-消费者”问题
- java实现 生产者和消费者问题 多线程同步示例
- java多线程总结六:经典生产者消费者问题实现
- 生产者/消费者问题的多种Java实现方式
- 生产者-消费者问题(condition)Java实现
- Java线程间同步实现生产者-消费者模式
- 生产者消费者问题之Java线程实现