声明:本实例是在网上看到,做了很小的修改。所以感谢之前的作者。只是一时忘了哪儿看到,没法加入链接,向原作者道歉,以示尊重。抱歉-^)...

同步栈:

 1 class SycnStack {
 2     private Integer index = 0;
 3     private char[] data;
 4
 5     public SycnStack(int num) {
 6         data = new char[num];
 7     }
 8
 9     public void push(char c) {
10         synchronized (this) {// 对index加锁为何不行???必须this
11             while (index == data.length ) {
12                 System.out.println(index +"  池子已满,不能放入!"
13                         + Thread.currentThread().toString());
14                 try {
15                     this.wait();
16                 } catch (InterruptedException e) {
17                     e.printStackTrace();
18                 }
19             }
20             this.notify();// 获取锁
21             data[index] = c;
22             System.out.println(index +" 放入" + c + " "
23                     + Thread.currentThread().toString());
24             index++;
25         }
26     }
27
28     public Character pop() {
29         synchronized (this) {
30             while (index == 0) {
31                 System.out.println(index +" 池子已空,取不了了!"
32                         + Thread.currentThread().toString());
33                 try {
34                     this.wait();
35                 } catch (InterruptedException e) {
36                     e.printStackTrace();
37                 }
38             }
39             this.notify();
40             index--;
41             char c = data[index];
42             System.out.println(index +" 取出" + c + " "
43                     + Thread.currentThread().toString());
44             return c;
45         }
46     }
47 }

生产者和消费者:

 1 class Producer implements Runnable {
 2     private SycnStack stack;
 3
 4     public Producer(SycnStack stack) {
 5         this.stack = stack;
 6     }
 7
 8     public void run() {
 9         int i = 10;
10         while (i-- > 0) {
11             stack.push((char) (26 * Math.random() + 'A'));
12             Thread.yield();
13         }
14     }
15 }
16
17 class Consumer implements Runnable {
18     private SycnStack stack;
19
20     public Consumer(SycnStack stack) {
21         this.stack = stack;
22     }
23
24     public void run() {
25         int i = 10;
26         while (i-- > 0) {
27             stack.pop();
28             Thread.yield();
29         }
30     }
31 }

主程序:

1 public class ProductorConsumer {
2     public static void main(String[] args) {
3         SycnStack s = new SycnStack(5);
4         new Thread(new Producer(s)).start();
5         new Thread(new Consumer(s)).start();
6     }
7 }

That's all.  thank you ...

转载于:https://www.cnblogs.com/iceman-wx/archive/2013/03/21/2974388.html

基于java多线程来实现生产者和消费者的实例相关推荐

  1. Java多线程2.3.生产者与消费者之间的关系2

    生产者与消费者之间的关系 1.线程间通信问题描述图 2.线程的状态转换图及常见执行情况 3.等待唤醒机制思路图解 4.线程的生命周期

  2. java 多线程经典例子——生产者与消费者的问题

    产品名称类: public class Product {//产品名称private String name;public String getName() {return name;}public ...

  3. C#多线程学习(三) 生产者和消费者

    C#多线程学习(三) 生产者和消费者 原文链接:http://kb.cnblogs.com/page/42530/ 本系列文章导航 C#多线程学习(一) 多线程的相关概念 C#多线程学习(二) 如何操 ...

  4. C#多线程学习(三) 生产者和消费者 (转载系列)——继续搜索引擎研究

    前面说过,每个线程都有自己的资源,但是代码区是共享的,即每个线程都可以执行相同的函数.这可能带来的问题就是几个线程同时执行一个函数,导致数据的混乱,产生不可预料的结果,因此我们必须避免这种情况的发生. ...

  5. JAVA物联所需技术_基于JAVA多线程技术解决物联云端服务雪崩效应的方法与流程...

    本发明涉及互联网技术领域,特别涉及一种基于JAVA多线程技术解决物联云端服务雪崩效应的方法. 背景技术: 目前,物联云系统已经作为普遍的智能电视平台出现在我们面前,而细致分析物联云系统我们可以发现,当 ...

  6. 基于Java多线程的打怪升级类游戏设计与开发

    摘要:本文论述了通过JAVA多线程.基于JAVA Swing的GUI图形用户界面设计.IO输入输出流.JDBC技术,实现了游戏系统的UI设计.游戏数据的存储.关卡的设置.用户头像的上传与更改.游戏数据 ...

  7. java 实现违章_基于JAVA的车辆违章查询数据调用代码实例

    基于JAVA的车辆违章查询数据调用代码实例 代码描述:基于JA V A的车辆违章查询数据调用代码实例 相关平台:聚合数据 import java.io.BufferedReader; import j ...

  8. java 随机手机验证码_基于Java随机生成手机短信验证码的实例代码|chu

    简单版 /** * 产生4位随机数(0000-9999) * * @return 4位随机数 */ public static String getFourRandom() { return Stri ...

  9. java查询序列_基于JAVA的苹果序列号查询api调用代码实例

    代码描述:基于JAVA的苹果序列号查询api调用代码实例 关联数据:苹果序列号 接口地址:http://www.juhe.cn/docs/api/id/37 1.[代码][Java]代码 import ...

最新文章

  1. 使用Aspose.Pdf for .NET实现PDF文档到Excel、EPS、SVG等的转换
  2. 化验室计算机用户管理,计算机实验室管理思路及方法
  3. c语言程序段的流程图怎么画,大家帮我看看这个程序的流程图怎么画,谢了
  4. Linux系统的基本命令
  5. 欧拉回路【洛谷习题】无序字母对
  6. java集合框架栈_自己实现集合框架(九):栈接口
  7. ASP.NET应用程序使用NLog记录日志
  8. (视频+图文)机器学习入门系列-第3章 逻辑回归
  9. python绘制三维曲线图_Python基于matplotlib实现绘制三维图形功能示例
  10. 第三次学JAVA再学不好就吃翔(part6)--基础语法之char数据类型
  11. centos普通用户修改文件权限_用户管理(特殊权限、特殊属性、umask 默认权限 )
  12. mysql alter table if_MySQL中的alter table命令的基本使用方法及提速优化
  13. 一阶系统开环传递函数表达式_自控原理之系统辨识--入门介绍
  14. HUAWEI CE6870 IPv6 OSPFv3 配置
  15. Mysql时间函数及格式处理
  16. 员工申请加薪无望辞职,老板:不知感恩
  17. 项目管理PMP:项目绩效考核管理制度(全岗位流程图66页)
  18. Unknown error finalizing or resetting statement (5: database is locked)
  19. Django-- (三) Django数据库操作
  20. 幼儿园stem教育的发展有什么意义

热门文章

  1. Oracle Rac 11R2添加节点
  2. 用户利益何在:微软Windows10新政背后的疑问
  3. 正确使用 Android 性能分析工具——TraceView
  4. 核心动画的接触点滴(五)
  5. win8.1系统用户看过来,0x80004005错误解决大法!
  6. VMware桌面虚拟化在学校机房的应用
  7. 人工智能——面向对象表示法
  8. vbscript错误代码及对应解释大全[z]
  9. python类对象和实例对象
  10. 微服务架构的优势与不足(三)