【Java多线程】-生产者与消费者
2015-09-11 21:37
603 查看
场景:有一个盘子,最多可放4个苹果。
生产者往盘子里放苹果,若盘子满则生产者等待,否则放入一个苹果,并通知消费者消费;
消费者从盘子里取苹果,若盘子空则消费者等待,否则取走一个苹果,并通知生产者生产。
生产者往盘子里放苹果,若盘子满则生产者等待,否则放入一个苹果,并通知消费者消费;
消费者从盘子里取苹果,若盘子空则消费者等待,否则取走一个苹果,并通知生产者生产。
package org.iti.thread; import java.util.ArrayList; import java.util.List; public class ThreadDemo_3 { public static void main(String args[]) { Plate plate = new Plate(); for (int i = 0; i < 15; i++) { new Thread(new AddThread(plate)).start(); new Thread(new GetThread(plate)).start(); } } } class AddThread implements Runnable { private Plate plate; private Object apple = new Object(); public AddThread(Plate plate) { this.plate = plate; } public void run() { plate.putApple(apple); } } class GetThread implements Runnable { private Plate plate; public GetThread(Plate plate) { this.plate = plate; } public void run() { plate.getApple(); } } class Plate { List<Object> apples = new ArrayList<Object>(); public synchronized Object getApple() { while (apples.size() == 0) { try { wait(); } catch (InterruptedException e) { e.printStackTrace(); } } Object apple = apples.get(0); apples.remove(apple); notify(); System.out.println("拿到苹果"); return apple; } public synchronized void putApple(Object apple) { while (apples.size() > 3) { try { wait(); } catch (InterruptedException e) { e.printStackTrace(); } } apples.add(apple); notify(); System.out.println("放入苹果"); } }
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- Python3写爬虫(四)多线程实现数据爬取
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树