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

本文通过使用Java实现的生产者消费者模型,探讨了如何利用多线程和同步机制来高效地处理数据流,展示了生产者将数据放入队列,而消费者从队列中取出并处理数据的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先上代码

  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  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值