您的位置:首页 > 其它

多线程(生产者,消费者)的简单实现

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);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: