Java经典线程同步问题------生产者与消费者

原创 2015年07月07日 13:22:07

先上代码

  1. class Test  
  2. {  
  3.     public static void main(String []args)  
  4.     {  
  5.         Queue q=new Queue();  
  6.         Producer p=new Producer(q);  
  7.         Consumer c=new Consumer(q);  
  8.         p.start();  
  9.         c.start();  
  10.     }  
  11. }  
  12.   
  13. class Producer extends Thread  
  14. {  
  15.     Queue q;  
  16.     Producer(Queue q)  
  17.     {  
  18.         this.q=q;  
  19.     }  
  20.     public void run()  
  21.     {  
  22.         for(int i=0;i<10;i++)  
  23.         {     
  24.             q.put(i);  
  25.             System.out.println("Producer put"+i);  
  26.         }  
  27.     }  
  28. }  
  29. class Consumer extends Thread  
  30. {  
  31.     Queue q;  
  32.     Consumer(Queue q)  
  33.     {  
  34.         this.q=q;  
  35.     }  
  36.     public void run()  
  37.     {  
  38.         while(true)  
  39.         {  
  40.             System.out.println("Consumer get"+q.get());  
  41.         }  
  42.     }     
  43. }  
  44.   
  45. class Queue  
  46. {  
  47.     int value;  
  48.     boolean bFull=false;  
  49.     public synchronized void put(int i)  
  50.     {  
  51.           
  52.         if(!bFull)  
  53.         {  
  54.         value=i;  
  55.         bFull=true;  
  56.         notify();  
  57.         }  
  58.     try{  
  59.     wait();  
  60.     }  
  61.     catch(Exception e)  
  62.     {}  
  63.     }  
  64.     public synchronized int get()  
  65.     {  
  66.     if(!bFull)  
  67.     {  
  68.         try  
  69.         {  
  70.             wait();  
  71.         }  
  72.         catch(Exception e)  
  73.         {  
  74.           
  75.         }  
  76.     }  
  77.     bFull=false;  
  78.     notify();  
  79.     return value;  
  80.     }  
  81. }  

运行结果

  1. Producer put0  
  2. Consumer get0  
  3. Consumer get1  
  4. Producer put1  
  5. Consumer get2  
  6. Producer put2  
  7. Consumer get3  
  8. Producer put3  
  9. Consumer get4  
  10. Producer put4  
  11. Consumer get5  
  12. Producer put5  
  13. Consumer get6  
  14. Producer put6  
  15. Consumer get7  
  16. Producer put7  
  17. Consumer get8  
  18. Producer put8  
  19. Consumer get9  
  20. Producer put9  
版权声明:本文为博主http://www.feixueteam.net原创文章,未经博主允许不得转载。zuiniusn.com

进程间同步互斥经典问题(一)生产者-消费者问题

问题描述:生产者-消费者问题,也叫做缓存绑定问题(bounded-buffer),是一个多进程同步问题。 即有两个进程:制造少和消费者,共享一个固定大小的缓存 制造商的工作是制造一段数据...
  • qq_24451605
  • qq_24451605
  • 2015年11月01日 22:11
  • 3069

【操作系统总结】经典的进程同步问题-生产者消费者问题

生产者消费者问题问题描述是:有一群生产者进程在生产产品,此产品提供给消费者去消费。为使生产者和消费者进程能并发执行,在它们之间设置一个具有n个缓冲池,生产者进程可将它所生产的产品放入一个缓冲池中,消费...
  • ttf1993
  • ttf1993
  • 2015年05月31日 12:55
  • 1818

进程同步互斥经典题之消费者与生产者问题

操作系统进程同步互斥经典题之消费者与生产者问题
  • lj_2_0_2
  • lj_2_0_2
  • 2015年10月29日 21:00
  • 2568

经典线程同步问题(生产者&消费者)--Java实现

====================================================== 注:本文源代码点此下载 =============================...
  • javazhuanzai
  • javazhuanzai
  • 2012年01月16日 02:30
  • 233

多线程代码 经典线程同步互斥问题 生产者消费者问题

  • 2015年06月01日 22:06
  • 16KB
  • 下载

经典线程同步问题(生产者&消费者)

生产者-消费者(producer-consumer)问题是一个著名的线程同步问题。它描述的是:有一群生产者线程在生产产品,并将这些产品提供给消费者线程去消费。 为使生产者与消费者之间能够并发执行,在两...
  • zgjxhgh
  • zgjxhgh
  • 2012年03月29日 15:50
  • 353

java线程同步经典——生产者消费者

/* * 生产者消费者问题,生产完之后要wait * 消费完之后要wait,没消费或生产一个就notify别的线程 * Object 的wait方法,指的是当前的正在访问本对象的线程wait, ...
  • wuer0520
  • wuer0520
  • 2013年11月16日 11:13
  • 354

线程同步经典案例-生产者与消费者模型-Java

一、相关知识简介      在生产者-消费者模型中,若只使用synchronized关键字实现对象锁,程序在运行中可能会出现以下两种情况: 若生产者的速度大于消费者,那么在消费者来不及取前一个数据之前...
  • Xminyang
  • Xminyang
  • 2016年11月18日 15:58
  • 902

线程同步(生产者--消费者问题)

  • 2013年08月18日 20:46
  • 42KB
  • 下载

线程同步--生产者消费者问题

  • 2009年07月05日 22:15
  • 5KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java经典线程同步问题------生产者与消费者
举报原因:
原因补充:

(最多只允许输入30个字)