使用这个semaphore可以避免错失某些信号通知。当用semaphore来产生信号时,take和release这两个方法名看起来有点奇怪。这两个名字来源于后面把semaphore当做锁的例子,后面会详细介绍这个例子,在该例子中,take和release这两个名字会变得很合理。可以把它改造成具有计数功能的Semaphore。下面是一个可计数的Semaphore的简单实现。在BoundedSemaphore中,当已经产生的信号数量达到了上限,take方法将阻塞新的信号产生请求,直到某个线程调用release方法后,被阻塞于take方法的线程才能传递自己的信号。通过有上限的Semaphore可以限制进入某代码块的线程数量。设想一下,在上面的例子中,如果BoundedSemaphore 上限设为5将会发生什么?必须注意,release方法应当在finally块中被执行。

Java信号量全解析

Java信号量全解析

Java信号量全解析