java 使用信号量Semaphore实现生产者-消费者模式
2023-09-20 10:52:00
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
public class Cache {
private int cacheSize = 0;

public Semaphore mutex;
public Semaphore empty; //保证了容器空的时候(empty的信号量<=0), 消费者等待
public Semaphore full; //保证了容器满的时候(full的信号量 <= 0),生产者等待

public Cache(int size) {
mutex = new Semaphore(1); //二进制信号量,表示互斥锁
empty = new Semaphore(size);
full = new Semaphore(0);
}

public int getCacheSize()throws InterruptedException{
return cacheSize;
}

public void produce() throws InterruptedException{
empty.acquire(); // 消耗一个空位
mutex.acquire();
cacheSize++;
System.out.println("生产了一个产品, 当前产品数为" + cacheSize);
mutex.release();
full.release(); // 增加了一个产品


}

public void consume() throws InterruptedException{
full.acquire(); // 消耗了一个产品
mutex.acquire();
cacheSize--;
System.out.println("消费了一个产品, 当前产品数为" + cacheSize);
mutex.release();
empty.release(); // 增加了一个空位

}
}