基于java多线程来实现生产者和消费者的实例
声明:本实例是在网上看到,做了很小的修改。所以感谢之前的作者。只是一时忘了哪儿看到,没法加入链接,向原作者道歉,以示尊重。抱歉-^)...
同步栈:
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多线程来实现生产者和消费者的实例相关推荐
- Java多线程2.3.生产者与消费者之间的关系2
生产者与消费者之间的关系 1.线程间通信问题描述图 2.线程的状态转换图及常见执行情况 3.等待唤醒机制思路图解 4.线程的生命周期
- java 多线程经典例子——生产者与消费者的问题
产品名称类: public class Product {//产品名称private String name;public String getName() {return name;}public ...
- C#多线程学习(三) 生产者和消费者
C#多线程学习(三) 生产者和消费者 原文链接:http://kb.cnblogs.com/page/42530/ 本系列文章导航 C#多线程学习(一) 多线程的相关概念 C#多线程学习(二) 如何操 ...
- C#多线程学习(三) 生产者和消费者 (转载系列)——继续搜索引擎研究
前面说过,每个线程都有自己的资源,但是代码区是共享的,即每个线程都可以执行相同的函数.这可能带来的问题就是几个线程同时执行一个函数,导致数据的混乱,产生不可预料的结果,因此我们必须避免这种情况的发生. ...
- JAVA物联所需技术_基于JAVA多线程技术解决物联云端服务雪崩效应的方法与流程...
本发明涉及互联网技术领域,特别涉及一种基于JAVA多线程技术解决物联云端服务雪崩效应的方法. 背景技术: 目前,物联云系统已经作为普遍的智能电视平台出现在我们面前,而细致分析物联云系统我们可以发现,当 ...
- 基于Java多线程的打怪升级类游戏设计与开发
摘要:本文论述了通过JAVA多线程.基于JAVA Swing的GUI图形用户界面设计.IO输入输出流.JDBC技术,实现了游戏系统的UI设计.游戏数据的存储.关卡的设置.用户头像的上传与更改.游戏数据 ...
- java 实现违章_基于JAVA的车辆违章查询数据调用代码实例
基于JAVA的车辆违章查询数据调用代码实例 代码描述:基于JA V A的车辆违章查询数据调用代码实例 相关平台:聚合数据 import java.io.BufferedReader; import j ...
- java 随机手机验证码_基于Java随机生成手机短信验证码的实例代码|chu
简单版 /** * 产生4位随机数(0000-9999) * * @return 4位随机数 */ public static String getFourRandom() { return Stri ...
- java查询序列_基于JAVA的苹果序列号查询api调用代码实例
代码描述:基于JAVA的苹果序列号查询api调用代码实例 关联数据:苹果序列号 接口地址:http://www.juhe.cn/docs/api/id/37 1.[代码][Java]代码 import ...
最新文章
- 使用Aspose.Pdf for .NET实现PDF文档到Excel、EPS、SVG等的转换
- 化验室计算机用户管理,计算机实验室管理思路及方法
- c语言程序段的流程图怎么画,大家帮我看看这个程序的流程图怎么画,谢了
- Linux系统的基本命令
- 欧拉回路【洛谷习题】无序字母对
- java集合框架栈_自己实现集合框架(九):栈接口
- ASP.NET应用程序使用NLog记录日志
- (视频+图文)机器学习入门系列-第3章 逻辑回归
- python绘制三维曲线图_Python基于matplotlib实现绘制三维图形功能示例
- 第三次学JAVA再学不好就吃翔(part6)--基础语法之char数据类型
- centos普通用户修改文件权限_用户管理(特殊权限、特殊属性、umask 默认权限 )
- mysql alter table if_MySQL中的alter table命令的基本使用方法及提速优化
- 一阶系统开环传递函数表达式_自控原理之系统辨识--入门介绍
- HUAWEI CE6870 IPv6 OSPFv3 配置
- Mysql时间函数及格式处理
- 员工申请加薪无望辞职,老板:不知感恩
- 项目管理PMP:项目绩效考核管理制度(全岗位流程图66页)
- Unknown error finalizing or resetting statement (5: database is locked)
- Django-- (三) Django数据库操作
- 幼儿园stem教育的发展有什么意义