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

相关文章推荐

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

====================================================== 注:本文源代码点此下载 =============================...

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

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

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

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

Java线程同步实例 生产者 消费者问题分析

Java线程同步实例 生产者 消费者问题分析 实例1 public class mytread { public static void main(String[] args) { ...

Java 线程同步wait()用法 生产者 消费者问题

最近学习Java线程,自己写了一个非典型生产者,消费者代码,如下: 生产者类: package com.sx.jtwait; import java.util.Random; pu...

Java线程之由生产者/消费者问题看线程同步与通信

生产者消费者问题是研究多线程程序时绕不开的问题,它的描述是有一块生产者和消费者共享的有界缓冲区,生产者往缓冲区放入产品,消费者从缓冲区取走产品,这个过程可以无休止的执行,不能因缓冲区满生产者放不进产品...

java线程(三) 生产者消费者模式-线程同步问题

引言   生产者和消费者问题是线程模型中的经典问题:生产者和消费者在同一时间段内共用同一个存储空间,如下图所示,生产者向空间里存放数据,而消费者取用数据,如果不加以协调可能会出现以下情况: 生...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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