public class Pattern1 {
private final Semaphore semaphore;
//这里的队列 这里默认为一般的容器,一般为无界的阻塞队列
private final BlockingQueue<String> queue;
public Pattern1(Semaphore semaphore, BlockingQueue<String> queue) {
this.semaphore = semaphore;
this.queue = queue;
}
public String take()throws Exception{
return queue.take();
}
public void put(String s) throws Exception{
semaphore.acquire();
try {
queue.put(s);
} finally {
semaphore.release();
}
}
public static void main(String[] args) {
}
}
主要用于存储队列使用无界限的,对生产者的一种限制,Semaphore相当于一个信号量,当他的参数变为一的时候,他就转变为互斥的信号量。
切记 acquire and release 这两个是一起配套使用的,为了防止异常出现,所以我们应该将 release 放在 finally 之中