生产者与消费者问题
来源:互联网 发布:Ubuntu 软件怎么打不开 编辑:程序博客网 时间:2024/05/01 17:09
最近在看java并发编程,生产者与消费者是个经典题目,5年前去百度面试的时候,让我当场写出这个程序,今天我就回顾一下,这里涉及到几个点,一个生产者,一个消费者,一个馒头实体类,一个馒头筐类,一个main方法类,记住这几个点,生产者和消费者程序就很好写了,代码如下:
/* * 生产者与消费者问题 */public class ProduceConsume { public static void main(String[] args) { SyncStack ss = new SyncStack(); Produce pd = new Produce(ss); Consume cs = new Consume(ss); Thread t1 = new Thread(pd); Thread t2 = new Thread(cs); t1.start(); t2.start(); }}/* * 馒头实体类 */class ManTou { private int id; public ManTou(int id) { this.id = id; } public int getId() { return this.id; } @Override public String toString() { // TODO Auto-generated method stub return "ManTou " + getId(); }}/* * 馒头框类 */class SyncStack { int index = 0; ManTou[] mtArray = new ManTou[6]; public synchronized void push(ManTou mt) { while (index == mtArray.length) { try { this.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } this.notify(); mtArray[index] = mt; index++; System.out.println("生产了" + mt); } public synchronized ManTou pop() { while (index == 0) { try { this.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } this.notify(); index--; System.out.println("消费了" + mtArray[index]); return mtArray[index]; }}/* * 生产者 */class Produce implements Runnable { SyncStack ss = null; public Produce(SyncStack ss) { this.ss = ss; } @Override public void run() { // TODO Auto-generated method stub for (int i = 0; i < 20; i++) { ManTou mt = new ManTou(i); if (ss != null) { ss.push(mt); } try { Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } } }}/* * 消费者 */class Consume implements Runnable { SyncStack ss = null; public Consume(SyncStack ss) { this.ss = ss; } @Override public void run() { // TODO Auto-generated method stub for (int i = 0; i < 20; i++) { if (ss != null) { ss.pop(); } try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } }}
以上代码,凭记忆手工敲的,如有问题,欢迎指正。
0 0
- 生产者与消费者问题
- 生产者与消费者问题
- 生产者与消费者问题
- 生产者与消费者问题
- 生产者与消费者问题
- 生产者与消费者问题
- 生产者与消费者问题
- 消费者与生产者问题
- 生产者与消费者问题
- 生产者与消费者问题
- 消费者与生产者问题
- 生产者与消费者问题
- 生产者与消费者问题
- 生产者与消费者问题
- 生产者与消费者问题
- java生产者与消费者问题
- 消费者与生产者问题代码
- C#生产者与消费者问题
- 三、Linux设备模型(3)_Uevent
- Python文件的读写
- IOS-定位地图
- 误删文件的解决办法
- 【OpenCV学习笔记 009】图像滤波
- 生产者与消费者问题
- 前台页面table表格相同数据列合并
- 读书笔记八
- 例题:反片语(UVa156)
- Android中AsyncTask的使用
- JQuery中$.ajax()方法参数详解
- xamarin axml无法预览
- 第3周项目3 求集合并集
- 第三周项目二--建设“顺序表”算法库