先上代码

  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. unity3D 使用欧拉角控制视野注意点

    变量声明: public PlayerInput p; //表示控制代码用来获得用户是否按下 public float rotateSpeed = 50f; //旋转速度 private GameOb ...

  2. SpringCloud 之 Fegin —— 发送GET、POST请求以及文件上传

    由于项目需要调用其他微服务的数据,首先想到的就是写一个http网络请求的工具类,但是想到在之前看springCloud的时候里面有这个Fegin可以实现,就顺便实践一下,虽然过程有点坎坷,好在都顺利解 ...

  3. java.util.Date

    package com.etc.usual; import java.util.Calendar; import java.util.Date; /** * * @author Administrat ...

  4. Jenkins自动化部署.netcore程序

    一.安装jenkins 百度一下 二.构建前的准备 搭建好.net core2.0的环境,下载:https://aka.ms/dotnetcore-2-windowshosting  (,net co ...

  5. 【Oracle】Rman备份策略

    1. 查看可设置参数 RMAN> show all; RMAN configuration parameters for database with db_unique_name DRZ are ...

  6. AI:IPPR的模式生成-学习/训练方式(基本结构)

    前言:        一个完备的模式识别系统,必然包含一个模式识别模型,此外还要附加一个评价模型,以及为了构建识别模型而构建的学习模型,并选择在学习模型中使用的学习方法. 否则  w=w 这样,)那样 ...

  7. 使用 C# 进行 HTTP 操作

    说明 主要使用到了 Newtonsoft.Json 和 System.Net 两个命名空间. Program.cs static void Main(string[] args) { WebOpert ...

  8. 【JSP】中文乱码问题

     原作者http://www.cnblogs.com/xing901022/p/4354529.html 阅读目录 之前总是碰到JSP页面乱码的问题,每次都是现在网上搜,然后胡乱改,改完也不明白原因. ...

  9. Spring MVC 中的基于注解的 Controller(转载)

           终于来到了基于注解的 Spring MVC 了.之前我们所讲到的 handler,需要根据 url 并通过 HandlerMapping 来映射出相应的 handler 并调用相应的方法 ...

  10. vs2008 打开项目 无法读取项目文件

    卸载vs2015之后 出现问题 C:\Windows\SysWOW64\regedit.exe 64系统运行这个 删除 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MS ...