62,620
社区成员
发帖
与我相关
我的任务
分享
import java.util.concurrent.locks.*;
public class ProducerConsumerDemo {
public static void main(String[] args) {
Store store = new Store();
Producer pro = new Producer(store);
Consumer con = new Consumer(store);
Thread t0 = new Thread(pro);
Thread t1 = new Thread(pro);
Thread t2 = new Thread(con);
Thread t3 = new Thread(con);
t0.start();
t1.start();
t2.start();
t3.start();
}
}
class Res {// 产品
private int num;
public Res(int num) {
this.num = num;
}
public int getNum() {
return num;
}
}
class Store {// 可以看做商店
private Res[] r = new Res[30];// 生产的最大容量
private Lock lock = new ReentrantLock();
Condition producer_con = lock.newCondition();
Condition consumer_con = lock.newCondition();
int producer_index;// 生产时数组指针
int consumer_index;// 消费时数组指针
int count;// 库存
int num;// 产品编号
public void produce() {// 生产--可以看做进货
lock.lock();
try{
while (count == r.length)
try{producer_con.await();}catch(Exception e){}
r[producer_index] = new Res(num);
System.out.println(Thread.currentThread().getName() + "生产了一个产品,产品编号为:" + r[producer_index].getNum());
try{Thread.sleep(50);}catch(Exception e){}//延迟
count++;// 库存加1
num++;// 编号加1
producer_index++;// 数组指针+1
if (producer_index == r.length - 1)// 数组最后一个元素位,重置指针为0
producer_index = 0;
consumer_con.signal();// 唤醒一次消费者。
} finally {
lock.unlock();
}
}
public void consume() {// 消费--可以看做卖货
lock.lock();
try {
while (count == 0)
try{consumer_con.await();}catch(Exception e){}
System.out.println(Thread.currentThread().getName() + "购买了一个产品,产品编号为:" + r[consumer_index].getNum());
try{Thread.sleep(50);}catch(Exception e){}//延迟
count--;// 库存减1
consumer_index++;// 数组指针+1
if (consumer_index == r.length - 1)// 数组最后一个元素位,重置指针为0
consumer_index = 0;
producer_con.signal();// 唤醒一次消费者。
} finally {
lock.unlock();
}
}
}
class Producer implements Runnable {// 生产者
private Store p;
public Producer(Store p) {
this.p = p;
}
public void run() {
while (true) {
p.produce();
}
}
}
class Consumer implements Runnable {// 消费者
private Store p;
public Consumer(Store p) {
this.p = p;
}
public void run() {
while (true) {
p.consume();
}
}
}

/*
Thread-0生产了一个产品,产品编号为:0
Thread-0生产了一个产品,产品编号为:1
Thread-0生产了一个产品,产品编号为:2
Thread-0生产了一个产品,产品编号为:3
Thread-0生产了一个产品,产品编号为:4
Thread-0生产了一个产品,产品编号为:5
Thread-0生产了一个产品,产品编号为:6
Thread-0生产了一个产品,产品编号为:7
Thread-0生产了一个产品,产品编号为:8
Thread-0生产了一个产品,产品编号为:9
Thread-0生产了一个产品,产品编号为:10
Thread-0生产了一个产品,产品编号为:11
Thread-0生产了一个产品,产品编号为:12
Thread-0生产了一个产品,产品编号为:13
Thread-0生产了一个产品,产品编号为:14
Thread-0生产了一个产品,产品编号为:15
Thread-0生产了一个产品,产品编号为:16
Thread-0生产了一个产品,产品编号为:17
Thread-0生产了一个产品,产品编号为:18
Thread-0生产了一个产品,产品编号为:19
Thread-0生产了一个产品,产品编号为:20
Thread-1生产了一个产品,产品编号为:21
Thread-1生产了一个产品,产品编号为:22
Thread-1生产了一个产品,产品编号为:23
Thread-1生产了一个产品,产品编号为:24
Thread-1生产了一个产品,产品编号为:25
Thread-1生产了一个产品,产品编号为:26
Thread-1生产了一个产品,产品编号为:27
Thread-1生产了一个产品,产品编号为:28
Thread-1生产了一个产品,产品编号为:29
Thread-2购买了一个产品,产品编号为:0
Thread-2购买了一个产品,产品编号为:1
Thread-2购买了一个产品,产品编号为:2
Thread-2购买了一个产品,产品编号为:3
Thread-2购买了一个产品,产品编号为:4
Thread-2购买了一个产品,产品编号为:5
Thread-2购买了一个产品,产品编号为:6
Thread-3购买了一个产品,产品编号为:7
Thread-3购买了一个产品,产品编号为:8
Thread-3购买了一个产品,产品编号为:9
Thread-3购买了一个产品,产品编号为:10
Thread-3购买了一个产品,产品编号为:11
Thread-3购买了一个产品,产品编号为:12
Thread-3购买了一个产品,产品编号为:13
Thread-3购买了一个产品,产品编号为:14
Thread-3购买了一个产品,产品编号为:15
Thread-3购买了一个产品,产品编号为:16
Thread-3购买了一个产品,产品编号为:17
Thread-3购买了一个产品,产品编号为:18
Thread-3购买了一个产品,产品编号为:19
Thread-3购买了一个产品,产品编号为:20
Thread-3购买了一个产品,产品编号为:21
Thread-3购买了一个产品,产品编号为:22
Thread-3购买了一个产品,产品编号为:23
Thread-3购买了一个产品,产品编号为:24
Thread-3购买了一个产品,产品编号为:25
Thread-3购买了一个产品,产品编号为:26
Thread-3购买了一个产品,产品编号为:27
Thread-3购买了一个产品,产品编号为:28
Thread-3购买了一个产品,产品编号为:29
Thread-0生产了一个产品,产品编号为:30
Thread-0生产了一个产品,产品编号为:31
Thread-0生产了一个产品,产品编号为:32
Thread-0生产了一个产品,产品编号为:33
Thread-0生产了一个产品,产品编号为:34
Thread-0生产了一个产品,产品编号为:35
Thread-0生产了一个产品,产品编号为:36
Thread-0生产了一个产品,产品编号为:37
Thread-0生产了一个产品,产品编号为:38
Thread-0生产了一个产品,产品编号为:39
Thread-1生产了一个产品,产品编号为:40
Thread-1生产了一个产品,产品编号为:41
Thread-1生产了一个产品,产品编号为:42
Thread-1生产了一个产品,产品编号为:43
Thread-2购买了一个产品,产品编号为:30
Thread-2购买了一个产品,产品编号为:31
Thread-2购买了一个产品,产品编号为:32
Thread-2购买了一个产品,产品编号为:33
Thread-3购买了一个产品,产品编号为:34
Thread-3购买了一个产品,产品编号为:35
Thread-3购买了一个产品,产品编号为:36
Thread-3购买了一个产品,产品编号为:37
Thread-3购买了一个产品,产品编号为:38
Thread-3购买了一个产品,产品编号为:39
Thread-3购买了一个产品,产品编号为:40
Thread-3购买了一个产品,产品编号为:41
Thread-3购买了一个产品,产品编号为:42
Thread-3购买了一个产品,产品编号为:43
Thread-0生产了一个产品,产品编号为:44
Thread-0生产了一个产品,产品编号为:45
Thread-1生产了一个产品,产品编号为:46
Thread-1生产了一个产品,产品编号为:47
Thread-1生产了一个产品,产品编号为:48
Thread-1生产了一个产品,产品编号为:49
Thread-1生产了一个产品,产品编号为:50
Thread-2购买了一个产品,产品编号为:44
Thread-2购买了一个产品,产品编号为:45
Thread-2购买了一个产品,产品编号为:46
Thread-2购买了一个产品,产品编号为:47
Thread-2购买了一个产品,产品编号为:48
Thread-2购买了一个产品,产品编号为:49
Thread-2购买了一个产品,产品编号为:50
Thread-0生产了一个产品,产品编号为:51
Thread-0生产了一个产品,产品编号为:52
Thread-0生产了一个产品,产品编号为:53
Thread-0生产了一个产品,产品编号为:54
Thread-0生产了一个产品,产品编号为:55
Thread-1生产了一个产品,产品编号为:56
Thread-1生产了一个产品,产品编号为:57
Thread-1生产了一个产品,产品编号为:58
Thread-1生产了一个产品,产品编号为:59*/