先上代码

  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. class Producer extends Thread
  13. {
  14. Queue q;
  15. Producer(Queue q)
  16. {
  17. this.q=q;
  18. }
  19. public void run()
  20. {
  21. for(int i=0;i<10;i++)
  22. {
  23. q.put(i);
  24. System.out.println("Producer put"+i);
  25. }
  26. }
  27. }
  28. class Consumer extends Thread
  29. {
  30. Queue q;
  31. Consumer(Queue q)
  32. {
  33. this.q=q;
  34. }
  35. public void run()
  36. {
  37. while(true)
  38. {
  39. System.out.println("Consumer get"+q.get());
  40. }
  41. }
  42. }
  43. class Queue
  44. {
  45. int value;
  46. boolean bFull=false;
  47. public synchronized void put(int i)
  48. {
  49. if(!bFull)
  50. {
  51. value=i;
  52. bFull=true;
  53. notify();
  54. }
  55. try{
  56. wait();
  57. }
  58. catch(Exception e)
  59. {}
  60. }
  61. public synchronized int get()
  62. {
  63. if(!bFull)
  64. {
  65. try
  66. {
  67. wait();
  68. }
  69. catch(Exception e)
  70. {
  71. }
  72. }
  73. bFull=false;
  74. notify();
  75. return value;
  76. }
  77. }

执行结果

  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

Java经典线程同步问题------生产者与消费者的更多相关文章

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

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

  2. linux中的线程同步:生产者、消费者问题

    #include <stdio.h> #include <semaphore.h> #include <unistd.h> #include <stdlib. ...

  3. Java多线程——线程同步

    在之前,已经学习到了线程的创建和状态控制,但是每个线程之间几乎都没有什么太大的联系.可是有的时候,可能存在多个线程多同一个数据进行操作,这样,可能就会引用各种奇怪的问题.现在就来学习多线程对数据访问的 ...

  4. 经典线程同步 信号量Semaphore

    阅读本篇之前推荐阅读以下姊妹篇: <秒杀多线程第四篇一个经典的多线程同步问题> <秒杀多线程第五篇经典线程同步关键段CS> <秒杀多线程第六篇经典线程同步事件Event& ...

  5. 秒杀多线程第八篇 经典线程同步 信号量Semaphore

    阅读本篇之前推荐阅读以下姊妹篇: <秒杀多线程第四篇一个经典的多线程同步问题> <且不超过最大资源数量. 第三个參数能够用来传出先前的资源计数,设为NULL表示不须要传出. 注意:当 ...

  6. Java中线程同步的理解 - 其实应该叫做Java线程排队

    Java中线程同步的理解 我们可以在计算机上运行各种计算机软件程序.每一个运行的程序可能包括多个独立运行的线程(Thread). 线程(Thread)是一份独立运行的程序,有自己专用的运行栈.线程有可 ...

  7. 转---秒杀多线程第八篇 经典线程同步 信号量Semaphore

    阅读本篇之前推荐阅读以下姊妹篇: <秒杀多线程第四篇一个经典的多线程同步问题> <秒杀多线程第五篇经典线程同步关键段CS> <秒杀多线程第六篇经典线程同步事件Event& ...

  8. java中线程同步的理解(非常通俗易懂)

    转载至:https://blog.csdn.net/u012179540/article/details/40685207 Java中线程同步的理解 我们可以在计算机上运行各种计算机软件程序.每一个运 ...

  9. 经典线程同步 互斥量Mutex

    阅读本篇之前推荐阅读以下姊妹篇: <秒杀多线程第四篇一个经典的多线程同步问题> <秒杀多线程第五篇经典线程同步关键段CS> <秒杀多线程第六篇经典线程同步事件Event& ...

随机推荐

  1. [python基础] Flasky-表单WTForms支持的html字段和内建函数

    WTForms 支持的HTML 标准字段如表4-1 所示.表4-1 WTForms支持的HTML标准字段字段类型              说 明StringField           文本字段T ...

  2. wireshark解析rtp协议,流媒体中的AMR/H263/H264包的方法

    抓到完整的流媒体包之后,用wireshark打开,其中的包可能不会自动映射成RTP+AMR/H263/H264的包,做如下修改操作即可:1.  把UDP 包解析成RTP/RTCP包.选中UDP包,右键 ...

  3. python使用MySQLdb向mySQL批量插入数据的方法

    该功能通过调用mySQLdb python库中的 cursor.executemany()函数完成批量处理. 今天用这个函数完成了批量插入 例程: def test_insertDB(options) ...

  4. Django day01 web应用程序 , http协议

    一:web应用程序1.什么是web应用程序 是一种可以通过web访问的应用程序,最大的好处就是, 只要有浏览器,用户就能很容易访问到应用程序 2. web应用程序的优缺点 缺点: 应用程序强调了浏览器 ...

  5. Python 35 进程间的通信(IPC机制)、生产者消费者模型

    一:进程间的通信(IPC):先进先出  管道:队列=管道+锁 from multiprocessing import Queue q=Queue(4) q.put(['first',],block=T ...

  6. BZOJ 2084 二分+hash OR Manacher

    思路: 二分+哈希 //By SiriusRen #include <cstdio> #include <cstring> #include <algorithm> ...

  7. [SGU 199] Beautiful People

    [SGU 199] Beautiful People The most prestigious sports club in one city has exactly N members. Each ...

  8. 【转】SQL SERVER 主体,已同步

    转自郭大侠博客:  https://www.cnblogs.com/gered/p/10601202.html 目录 SQL SERVER 基于数据库镜像的主从同步... 1 1.概念... 2 1. ...

  9. 6.10---mybatis的实体---接口---接口映射---主配置文件

  10. Last-Modified If-Modified-Since ETag If-None-Match

    Last-Modified.If-Modified-Since 有些数据随时都在变化. CNN.com 的主页经常几分钟就更新.另一方面,Google.com 的主页几个星期才更新一次 (当他们上传特 ...