1、生产者——消费者问题
(1)Semaphore实现
public class ProducerConsumer {
int count = 0;// 缓冲区的产品数量
Semaphore mutex = new Semaphore(1);
Semaphore empty = new Semaphore(N);
Semaphore full = new Semaphore(0);
class Producer implements Runnable {
public void run() {
while (true) {
Item item = produce();
empty.acquire();
mutex.acquire();
insert(item);// 向缓冲区添加产品
count++;
mutex.release();
full.release();
}
}
public Item produce() {...}
}
class Consumer implements Runnable {
public void run() {
while (true) {
full.acquire();
mutex.acquire();
Item item = remove();// 从缓冲区取出数据
count--;
mutex.release();
empty.release();
consume(item);
}
}
public void consume(Item item) {...}
}
}
(2)synchronized和wait()/notifyAll()实现
class Resource {
// 当前资源数量
private int