如何使用Semaphore类来控制有权访问对象的线程数?
答案 0 :(得分:4)
答案 1 :(得分:2)
使用信号量控制资源访问权限的另一个好处是可以在运行时调整信号量。例如,您可以拥有一些用例,您希望允许更多用户根据某些业务逻辑访问资源,然后再次减少它。 可调整大小的信号量的示例代码
public class ResizeableSemaphore extends Semaphore
{
private static final long serialVersionUID = 1L;
private int permit;
public ResizeableSemaphore(int permit) {
super(permit);
this.permit=permit;
}
public synchronized void resizeIfRequired(int newPermit)
{
int delta = newPermit - permit;
if(delta==0) return;
if(delta > permit) this.release(delta); // this will increase capacity
if(delta < 0) this.reducePermits(Math.abs(delta));
this.permit=newPermit;
}
}
答案 2 :(得分:0)
这是一个很好的例子,说明如何使用信号量来限制对象的并发访问:
http://technicalmumbojumbo.wordpress.com/2010/02/21/java-util-concurrent-java-5-semaphore/
关键点是:
答案 3 :(得分:0)
只需使用:
java.util.concurrent.Semaphore
有一个关于如何在javadoc中使用它的广泛示例:
http://download.oracle.com/javase/6/docs/api/java/util/concurrent/Semaphore.html
答案 4 :(得分:0)
也许您可以阅读this question的答案,并查看this example