1. package com.bjsxt.Thread.Demo;
  2. public class ProducerConsumer {
  3. /**
  4. * 生产者与消费者
  5. * @param args
  6. */
  7. public static void main(String[] args) {// 模拟线程
  8. SyncStack ss = new SyncStack();
  9. Producer p = new Producer(ss);
  10. Consumer c = new Consumer(ss);
  11. new Thread(p).start();// 开启线程
  12. new Thread(c).start();// 开启线程
  13. }
  14. }
  15.  
  16. /**
  17. * Woto类
  18. */
  19. class WoTo {
  20. int id;
  21. WoTo(int id) {
  22. this.id = id;
  23. }
  24. public String toString() {
  25. return "WoTo : " + id;
  26. }
  27. }
  28.  
  29. /**
  30. * 框类(用来装馒头)
  31. * @author wenfei
  32. */
  33. class SyncStack {
  34. int index = 0;
  35. WoTo[] arrwt = new WoTo[6];
  36.  
  37. public synchronized void push(WoTo wt) {
  38.  
  39. while (index == arrwt.length) {
  40.  
  41. try {
  42. this.wait();// 暂定当前对象
  43.  
  44. } catch (InterruptedException e) {
  45. e.printStackTrace();
  46. }
  47. }
  48. this.notify();// 叫醒当前线程
  49. arrwt[index] = wt;
  50. index++;
  51. }
  52.  
  53. public synchronized WoTo pop() {
  54. while (index == 0) {
  55.  
  56. try {
  57. this.wait();
  58. } catch (InterruptedException e) {
  59. e.printStackTrace();
  60. }
  61. }
  62. this.notify();
  63. index--;
  64. return arrwt[index];
  65. }
  66. }
  67.  
  68. /**
  69. * 生产者
  70. *
  71. * @author wenfei
  72. */
  73. class Producer implements Runnable {
  74. SyncStack ss = null;
  75.  
  76. Producer(SyncStack ss) {
  77. this.ss = ss;
  78. }
  79.  
  80. @Override
  81. public void run() {
  82. // 生产wt
  83. for (int i = 0; i <= 100; i++) {
  84. WoTo wt = new WoTo(i);
  85. ss.push(wt);// 往篮子里装窝头
  86. System.out.println("生产了--->" + wt);
  87. try {
  88. // Thread.sleep(1000);//每生产一个睡眠一秒
  89. Thread.sleep((int) Math.random() * 1000);
  90. } catch (InterruptedException e) {
  91. // TODO Auto-generated catch block
  92. e.printStackTrace();
  93. }
  94. }
  95. }
  96.  
  97. }
  98.  
  99. /**
  100. * 消费者
  101. *
  102. * @author wenfei
  103. */
  104. class Consumer implements Runnable {
  105. SyncStack ss = null;
  106.  
  107. Consumer(SyncStack ss) {
  108. this.ss = ss;
  109. }
  110.  
  111. @Override
  112. public void run() {
  113. for (int i = 0; i <= 100; i++) {
  114. WoTo wt = ss.pop();
  115. System.out.println("消费了--->" + wt);
  116. try {
  117. // Thread.sleep(1000);//每消费一个睡眠一秒
  118. Thread.sleep((int) Math.random() * 1000);//
  119. } catch (InterruptedException e) {
  120. // TODO Auto-generated catch block
  121. e.printStackTrace();
  122. }
  123. // System.out.println(wt);
  124. }
  125. }
  126.  
  127. }

java_Thread生产者与消费者 Demo的更多相关文章

  1. Scala调用Kafka的生产者和消费者Demo,以及一些配置参数整理

    kafka简介 Kafka是apache开源的一款用Scala编写的消息队列中间件,具有高吞吐量,低延时等特性. Kafka对消息保存时根据Topic进行归类,发送消息者称为Producer,消息接受 ...

  2. java多线程中的生产者与消费者之等待唤醒机制@Version1.0

    一.生产者消费者模式的学生类成员变量生产与消费demo,第一版1.等待唤醒:    Object类中提供了三个方法:    wait():等待    notify():唤醒单个线程    notify ...

  3. JAVA之旅(十五)——多线程的生产者和消费者,停止线程,守护线程,线程的优先级,setPriority设置优先级,yield临时停止

    JAVA之旅(十五)--多线程的生产者和消费者,停止线程,守护线程,线程的优先级,setPriority设置优先级,yield临时停止 我们接着多线程讲 一.生产者和消费者 什么是生产者和消费者?我们 ...

  4. Kafka 生产者和消费者入门代码基础

    这篇博文讲解Kafka 的生产者和消费者实例. 基础版本一 生产者 ProducerFastStart.java package com.xingyun.tutorial_1; import org. ...

  5. Java中的生产者、消费者问题

    Java中的生产者.消费者问题描述: 生产者-消费者(producer-consumer)问题, 也称作有界缓冲区(bounded-buffer)问题, 两个进程共享一个公共的固定大小的缓冲区(仓库) ...

  6. Java 多线程基础(十二)生产者与消费者

    Java 多线程基础(十二)生产者与消费者 一.生产者与消费者模型 生产者与消费者问题是个非常典型的多线程问题,涉及到的对象包括“生产者”.“消费者”.“仓库”和“产品”.他们之间的关系如下: ①.生 ...

  7. 母鸡下蛋实例:多线程通信生产者和消费者wait/notify和condition/await/signal条件队列

    简介 多线程通信一直是高频面试考点,有些面试官可能要求现场手写生产者/消费者代码来考察多线程的功底,今天我们以实际生活中母鸡下蛋案例用代码剖析下实现过程.母鸡在鸡窝下蛋了,叫练从鸡窝里把鸡蛋拿出来这个 ...

  8. 生产者与消费者以及ActiveMQ

    生产者与消费者以及ActiveMQ 一. 多线程实现生产者与消费者 1.1 生产者与消费者头文件 #pragma once #include <iostream> #include < ...

  9. 【C# Task】System.Threading.Channels 生产者和消费者模式

    前言 今天给大家分享一个微软官方的生产者/消费者方案的特性解决:Channel. Channel在% dotnet add package System.Threading.Channels 而在Co ...

随机推荐

  1. page61-将二分查找重写为一段面向对象的程序

    1 将二分查找重写为一段面向对象的程序 (用于在整数集合中进行查找的一种抽象数据类型) public class StaticSETofInts [API] StaticSETofInts(int[] ...

  2. 转VS快捷键

    “文本操作”快捷键 命令名 快捷键 说明 编辑.折叠到定义 Ctrl + M,Ctrl + O 自动确定在代码中创建区域的逻辑边界(如过程),然后隐藏它们. 编辑.注释选定内容 Ctrl + K,Ct ...

  3. JAVA环境变量JAVA_HOME、CLASSPATH、PATH设置详解

    Windows下JAVA用到的环境变量主要有3个,JAVA_HOME.CLASSPATH.PATH.下面逐个分析. JAVA_HOME 指向的是JDK的安装路径,如C:\jdk1.5.0_06,在这路 ...

  4. JSP之邮箱检验

    首先创建Email类继承Serializable接口以启用其序列化功能,而序列化又是为了保持版本的兼容性,即在版本升级时反序列化仍保持对象的唯一性.序列化接口没有方法或字段,仅用于标识可序列化的语义. ...

  5. 浅谈sqlserver数据库优化(一)----开光篇

    今天暂时无事,风和日丽,万里无云.游山的.玩水的.遛麻雀的都闲的不亦乐乎,也忙的不亦乐乎.在这美好的季节,依旧躲在被窝或是电脑旁绞尽脑汁敲键盘的人们,也别有一番滋味.废话少说,言归正传. 赶上了一个最 ...

  6. SQL 存储过程 执行效率优化提升 (显示估计)

    在sql server 查询区 通过执行 "显示估计的执行计划" ,可以给出 存储过程 缺少索引的提示,并自动生成建立相应 索引 的代码 显示估计的执行计划 执行结果提示: 哦,算 ...

  7. mac下apache的多站点配置

    以下操作均建立在    已经配置好了php环境 从网上搜索了下,后来自己配置了下还是比较简单的! 我的环境目录是在/Library/webServer/Documents 测试的时候可以直接在这里建立 ...

  8. AMQ学习笔记 - 14. 实践方案:基于ZooKeeper + ActiveMQ + replicatedLevelDB的主从部署

    概述 基于ZooKeeper + ActiveMQ + replicatedLevelDB,在Windows平台的主从部署方案. 主从部署可以提供数据备份.容错[1]的功能,但是不能提供负载均衡的功能 ...

  9. jQuery鼠标事件

    鼠标事件是在用户移动鼠标光标或者使用任意鼠标键点击时触发的.   (1):click事件:click事件于用户在元素敲击鼠标左键,并在相同元素上松开左键时触发.        $('p').click ...

  10. 对于javascript的词法作用域的思考

    曾经看到过这样一段有意思的程序: var a=3; function scopeTest(){ console.log(a); var a=2; console.log(a); } scopeTest ...