生产者与消费者
2016-10-25 14:04
357 查看
package com.zqb.bean3; public class Test07 { public static void main(String[] args) { AppleBox ab = new AppleBox(); Produce p = new Produce(ab); Consumer c = new Consumer(ab); Thread t = new Thread(p); t.start(); Thread t2 = new Thread(c); t2.start(); } } // 生产者 class Produce implements Runnable { AppleBox appleBox; public Produce(AppleBox appleBox) { this.appleBox = appleBox; } @Override public void run() { // 生产10个苹果到AppleBox中 for (int i = 1; i <= 10; i++) { Apple a = new Apple(i); appleBox.deposite(a); System.out.println(Thread.currentThread().getName() + "生产了" + a); try { Thread.sleep((int) Math.random() * 10000); } catch (InterruptedException e) { e.printStackTrace(); } } } } // 消费者 class Consumer implements Runnable { AppleBox appleBox; public Consumer(AppleBox appleBox) { this.appleBox = appleBox; } @Override public void run() { // 消费10个苹果 for (int i = 1; i <= 10; i++) { Apple a = appleBox.withdraw(); System.out.println(Thread.currentThread().getName() + "消费了" + a); try { Thread.sleep((int) Math.random() * 10000); } catch (InterruptedException e) { e.printStackTrace(); } } } } class AppleBox { int index = 0; Apple[] apples = new Apple[5]; public synchronized void deposite(Apple apple) { // 判断apples是否满了,满了,则不能再存 while (index >= apples.length) { try { wait(); } catch (InterruptedException e) { e.printStackTrace(); } } // 没满则存 notifyAll(); apples[index] = apple; index++; } public synchronized Apple withdraw() { // 判断apples是否空了,空了,则不能再取 while (index == 0) { try { wait(); } catch (InterruptedException e) { e.printStackTrace(); } } // 没空则取 notifyAll(); Apple a = apples[index - 1]; index--; return a; } } class Apple { int id; Apple(int id) { this.id = id; } public String toString() { return "apple" + id; } }
相关文章推荐
- 线程中生产者和消费者
- Java线程(三):线程协作-生产者/消费者问题
- 操作系统中生产者/消费者问题(一)
- JAVA基础再回首(二十五)——Lock锁的使用、死锁问题、多线程生产者和消费者、线程池、匿名内部类使用多线程、定时器、面试题
- 架构设计:生产者/消费者模式 第1页:“生产者/消费者模式”介绍
- 生产者与消费者模式初步小结
- C#多线程学习(三) 生产者和消费者
- 单生产者单消费者模式的无锁队列实现
- 消费者与生产者的线程之间同步操作
- Java多线程之并发协作生产者消费者设计模式
- JAVA生产者与消费者问题
- C++11并发学习之五:生产者与消费者
- 生产者消费者模型
- 基于线程池的线程管理(BlockingQueue生产者消费者方式)实例
- 生产者消费者
- windows 使用关键段和条件变量实现的生产者和消费者线程同步
- 用 wait-notify 写一段代码来解决生产者-消费者问题?
- 线程中消费者生产者的实例代码(使用Lock类)
- java多线程系类:基础篇:10生产者消费者的问题
- 【java多线程】【生产者与消费者】【JDK5.0升级版】