多线程(生产者,消费者)的简单实现
2014-06-18 17:27
225 查看
package com.lzg; public class ThreadDemo02 { public static void main(String[] args) { Resource resource = new Resource(); Thread p1 = new Thread(new Producer("生产者1 ", 50, resource)); Thread p2 = new Thread(new Producer("生产者2 ", 30, resource)); Thread c1 = new Thread(new Custormer("消费者1 ", 50, resource)); Thread c2 = new Thread(new Custormer("消费者2 ", 30, resource)); p1.start(); p2.start(); c1.start(); c2.start(); } } class Resource { public static final int MAX_SIZE = 100; private int current_size = 0; public int getCurrent_size() { return current_size; } public void setCurrent_size(int current_size) { this.current_size = current_size; } public synchronized void produrce(int num, String name) { System.out.println("当前仓库剩余容量: " + (Resource.MAX_SIZE - current_size) + "----------" + name + "准备生产: " + num); while (current_size + num > Resource.MAX_SIZE) // 超过最大容量 { try { System.out.println("仓库存不下,请等待"); wait(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } current_size += num; System.out.println(name + "生产了 : " + num + "个产品-------------------" + "当前仓库剩余容量为" + (Resource.MAX_SIZE - current_size)); notify(); } public synchronized void consume(int num, String name) { System.out.println("当前仓库剩余产品: " + current_size + "********" + name + " 准备消费: " + num); while (current_size < num) { try { System.out.println("仓库没货,请等待"); wait(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } current_size -= num; System.out.println(name + "已经消费: " + num + "************ 当前仓库剩余产品: " + current_size); notify(); } } class Producer implements Runnable { private Resource r; private String name; private int num; public Producer(String name, int num, Resource r) { this.name = name; this.num = num; this.r = r; } @Override public void run() { // TODO Auto-generated method stub int i = 0; while (i++ < 10) { r.produrce(num, name); } } } class Custormer implements Runnable { private Resource r; private String name; private int num; public Custormer(String name, int num, Resource r) { this.name = name; this.num = num; this.r = r; } @Override public void run() { // TODO Auto-generated method stub int i = 0; while (i++ < 10) { r.consume(num, name); } } }
相关文章推荐
- 一种简单高效的生产者消费者多线程实现
- Java实现 简单的多线程“生产者-消费者”问题
- 用多线程实现“生产者-消费者问题”(代码+实验报告)
- 多线程---使用ManualResetEvent来控制线程间的同步(实现了消费者和生产者模式)
- 多线程实现消费者生产者的例子
- JAVA实现多线程生产者消费者模型
- java多线程之生产者与消费者问题的简单模拟
- 关于网宿厦门研发中心笔试的一道PV操作题:利用java中的多线程实现生产者与消费者的同步问题
- 多线程--C#利用多线程实现消费者和生产者模式
- 生产者消费者 多线程 单个缓冲区 Win32API实现
- java多线程实现生产者/消费者同步
- 生产者与消费者问题是典型的同步问题。这里简单介绍两种不同的实现方法。
- java多线程实现生产者与消费者问题
- .net实现--多线程之生产者/消费者问题
- 【转载】多线程--C#利用多线程实现消费者和生产者模式
- 简单实现生产者、消费者模型
- 多线程模拟实现生产者/消费者模型
- Ruby简单的生产者,消费者模式的实现
- 简单实现带有数据缓冲池的生产者消费者模型
- 用BlockingQueue实现一个简单的生产者-消费者模型