生产者-消费者问题--解决方案(一)
来源:互联网 发布:全民tv录像软件 编辑:程序博客网 时间:2024/05/21 07:57
生产者-消费者问题(producer - consumer)是一个著名的进程同步问题;今天我们用加入“”等待与唤醒“”来解决。
package zz;public class Producer extends Thread {private Box box;private String name;public Producer(Box b, String n) {box = b;name = n;}public void run() {for (int i = 1; i < 6; i++) {box.put(i);System.out.println("Producer " + name+ " produed: " + i);}try {sleep((int) (Math.random() * 100));} catch (InterruptedException e) {e.printStackTrace();}}}
package zz;class Consumer extends Thread {private Box box;private String name;public Consumer(Box b, String n) {box = b;name = n;}public void run() {int value = 0;for (int i = 1; i < 6; i++) {value = box.get();System.out.println("Consumer " + name+ " consumed: " + value);}try {sleep((int)(Math.random() * 100));} catch (InterruptedException e) {e.printStackTrace();}}}
package zz;public class Box{private int value;private boolean available = false;public synchronized int get() {//synchronized:给方法加锁while (available == false) {try {//等待生产者写入数据wait();} catch (InterruptedException e) {e.printStackTrace();}}available = false;//通知生产者数据已被取走,可以再次写入数据notifyAll();return value;}public synchronized void put(int value) {while (available == true) {try {//等待消费者取走数据wait();} catch (InterruptedException e) {e.printStackTrace();}}this.value = value;available = true;//通知消费者可以来取数据notifyAll();}}
package zz;public class ProducerConsumerTest {/** * 生产者/消费者问题 * @param args */public static void main(String[] args) {// TODO Auto-generated method stubBox box = new Box();Producer p = new Producer(box, "p");Consumer c = new Consumer(box, "c");p.start();c.start();}}
- 生产者-消费者问题--解决方案(一)
- 生产者-消费者问题
- 生产者-消费者问题
- 生产者-消费者问题
- 生产者-消费者问题
- 线程-生产者消费者问题
- 生产者-消费者问题实现
- 用JAVA 实现“生产者-消费者”问题
- 用JAVA 实现“生产者-消费者”问题
- 并发控制-生产者-消费者问题
- 用JAVA 实现“生产者-消费者”问题
- 用JAVA 实现“生产者-消费者”问题
- 生产者-消费者
- 生产者-消费者 模型
- 生产者-消费者模型
- 生产者-消费者问题(condition)Java实现
- 生产者-消费者问题(操作系统)原理与实现
- 多线程同步中的生产者消费者问题 - windows 平台实现
- JSP全部内容
- Output example.c
- 1.2. 什么是Browser Objects
- poj Compromise
- 硬件调试方式介绍
- 生产者-消费者问题--解决方案(一)
- volatile 说明
- Drupal 7 对QQ的支持
- Ubuntu 12.04 添加程序启动器
- 每天一点正则表达式积累(四)
- ffmpeg库音频解码示例
- Java 笔记
- poj2192(Zipper)
- 数据类型和Json格式