我正在编写一个用于管理对服务提供商的访问的库,无论它们是Web服务,文件系统资源......在某些情况下,提供商将要求预先购买一定数量的信用,例如为短信服务购买100个积分。
我打算将每个服务提供商的剩余信用额计数存储为共享状态,我会同步,但是我担心我必须挂在锁上的时间,即为了确保只有在请求发生时才更新计数我必须同步acccess:
// Concrete class provides implementation
public abstract Result provide();
public Result provideIfInCredit() {
Result result = null;
synchronized(this) {
if(remainingCredits > 0) {
result = provide();
remainingCredits--;
}
}
return result;
}
是否有一个我忽略的策略允许对服务提供者的并发请求,其中对provide()的调用不是锁定的一部分?