-
- All Known Implementing Classes:
AbstractBucket,DefaultBucketProxy,LockFreeBucket,SynchronizedBucket,ThreadUnsafeBucket
public interface BlockingBucketProvides blocking API for bucket that allows to use bucket as scheduler.
-
-
Method Summary
All Methods Instance Methods Abstract Methods Default Methods Modifier and Type Method Description default voidconsume(long numTokens)This is just overloaded equivalent ofconsume(long, BlockingStrategy)voidconsume(long numTokens, BlockingStrategy blockingStrategy)Consumes a specified number of tokens from the bucket.default voidconsumeUninterruptibly(long numTokens)This is just overloaded equivalent ofconsumeUninterruptibly(long, UninterruptibleBlockingStrategy)voidconsumeUninterruptibly(long numTokens, UninterruptibleBlockingStrategy blockingStrategy)Has same semantic withconsume(long, BlockingStrategy)but ignores interrupts(just restores interruption flag on exit).default booleantryConsume(long numTokens, long maxWaitTimeNanos)This is just overloaded equivalent oftryConsume(long, long, BlockingStrategy)booleantryConsume(long numTokens, long maxWaitTimeNanos, BlockingStrategy blockingStrategy)Tries to consume a specified number of tokens from the bucket.default booleantryConsume(long numTokens, Duration maxWait)This is just overloaded equivalent oftryConsume(long, long, BlockingStrategy)default booleantryConsume(long numTokens, Duration maxWait, BlockingStrategy blockingStrategy)This is just overloaded equivalent oftryConsume(long, long, BlockingStrategy)default booleantryConsumeUninterruptibly(long numTokens, long maxWaitTimeNanos)This is just overloaded equivalent oftryConsumeUninterruptibly(long, long, UninterruptibleBlockingStrategy)booleantryConsumeUninterruptibly(long numTokens, long maxWaitTimeNanos, UninterruptibleBlockingStrategy blockingStrategy)Has same semantic withtryConsume(long, long, BlockingStrategy)but ignores interrupts(just restores interruption flag on exit).default booleantryConsumeUninterruptibly(long numTokens, Duration maxWait)This is just overloaded equivalent oftryConsumeUninterruptibly(long, long, UninterruptibleBlockingStrategy)default booleantryConsumeUninterruptibly(long numTokens, Duration maxWait, UninterruptibleBlockingStrategy blockingStrategy)This is just overloaded equivalent oftryConsumeUninterruptibly(long, long, UninterruptibleBlockingStrategy)
-
-
-
Method Detail
-
tryConsume
boolean tryConsume(long numTokens, long maxWaitTimeNanos, BlockingStrategy blockingStrategy) throws InterruptedExceptionTries to consume a specified number of tokens from the bucket.The algorithm is following:
- If bucket has enough tokens, then tokens consumed and true returned immediately.
- If bucket has no enough tokens,
and required amount of tokens can not be refilled,
even after waiting of
maxWaitTimeNanosnanoseconds, then consumes nothing and returns false immediately. -
If bucket has no enough tokens,
but deficit can be closed in period of time less then
maxWaitTimeNanosnanoseconds, then tokens consumed(reserved in fair manner) from bucket and current thread blocked for a time required to close deficit, after unblocking method returns true.Note: If InterruptedException happen when thread was blocked then tokens will be not returned back to bucket, but you can use
Bucket.addTokens(long)to returned tokens back.
- Parameters:
numTokens- The number of tokens to consume from the bucket.maxWaitTimeNanos- limit of time(in nanoseconds) which thread can wait.blockingStrategy- specifies the way to block current thread to amount of time required to refill missed number of tokens in the bucket- Returns:
- true if
numTokenshas been consumed or false whennumTokenshas not been consumed - Throws:
InterruptedException- in case of current thread has been interrupted during the waiting
-
tryConsume
default boolean tryConsume(long numTokens, Duration maxWait, BlockingStrategy blockingStrategy) throws InterruptedExceptionThis is just overloaded equivalent oftryConsume(long, long, BlockingStrategy)- Parameters:
numTokens- The number of tokens to consume from the bucket.maxWait- limit of time which thread can wait.blockingStrategy- specifies the way to block current thread to amount of time required to refill missed number of tokens in the bucket- Returns:
- true if
numTokenshas been consumed or false whennumTokenshas not been consumed - Throws:
InterruptedException- in case of current thread has been interrupted during the waiting- See Also:
tryConsume(long, long, BlockingStrategy)
-
tryConsume
default boolean tryConsume(long numTokens, long maxWaitTimeNanos) throws InterruptedExceptionThis is just overloaded equivalent oftryConsume(long, long, BlockingStrategy)- Parameters:
numTokens- The number of tokens to consume from the bucket.maxWaitTimeNanos- limit of time(in nanoseconds) which thread can wait.- Returns:
- true if
numTokenshas been consumed or false whennumTokenshas not been consumed - Throws:
InterruptedException- in case of current thread has been interrupted during the waiting- See Also:
tryConsume(long, long, BlockingStrategy)
-
tryConsume
default boolean tryConsume(long numTokens, Duration maxWait) throws InterruptedExceptionThis is just overloaded equivalent oftryConsume(long, long, BlockingStrategy)- Parameters:
numTokens- The number of tokens to consume from the bucket.maxWait- limit of time which thread can wait.- Returns:
- true if
numTokenshas been consumed or false whennumTokenshas not been consumed - Throws:
InterruptedException- in case of current thread has been interrupted during the waiting- See Also:
tryConsume(long, long, BlockingStrategy)
-
tryConsumeUninterruptibly
boolean tryConsumeUninterruptibly(long numTokens, long maxWaitTimeNanos, UninterruptibleBlockingStrategy blockingStrategy)Has same semantic withtryConsume(long, long, BlockingStrategy)but ignores interrupts(just restores interruption flag on exit).- Parameters:
numTokens- The number of tokens to consume from the bucket.maxWaitTimeNanos- limit of time(in nanoseconds) which thread can wait.blockingStrategy- specifies the way to block current thread to amount of time required to refill missed number of tokens in the bucket- Returns:
- true if
numTokenshas been consumed or false whennumTokenshas not been consumed - See Also:
tryConsume(long, long, BlockingStrategy)
-
tryConsumeUninterruptibly
default boolean tryConsumeUninterruptibly(long numTokens, Duration maxWait, UninterruptibleBlockingStrategy blockingStrategy)This is just overloaded equivalent oftryConsumeUninterruptibly(long, long, UninterruptibleBlockingStrategy)- Parameters:
numTokens- The number of tokens to consume from the bucket.maxWait- limit of time which thread can wait.blockingStrategy- specifies the way to block current thread to amount of time required to refill missed number of tokens in the bucket- Returns:
- true if
numTokenshas been consumed or false whennumTokenshas not been consumed - See Also:
tryConsumeUninterruptibly(long, long, UninterruptibleBlockingStrategy)
-
tryConsumeUninterruptibly
default boolean tryConsumeUninterruptibly(long numTokens, long maxWaitTimeNanos)This is just overloaded equivalent oftryConsumeUninterruptibly(long, long, UninterruptibleBlockingStrategy)- Parameters:
numTokens- The number of tokens to consume from the bucket.maxWaitTimeNanos- limit of time(in nanoseconds) which thread can wait.- Returns:
- true if
numTokenshas been consumed or false whennumTokenshas not been consumed - See Also:
tryConsumeUninterruptibly(long, long, UninterruptibleBlockingStrategy)
-
tryConsumeUninterruptibly
default boolean tryConsumeUninterruptibly(long numTokens, Duration maxWait)This is just overloaded equivalent oftryConsumeUninterruptibly(long, long, UninterruptibleBlockingStrategy)- Parameters:
numTokens- The number of tokens to consume from the bucket.maxWait- limit of time which thread can wait.- Returns:
- true if
numTokenshas been consumed or false whennumTokenshas not been consumed - See Also:
tryConsumeUninterruptibly(long, long, UninterruptibleBlockingStrategy)
-
consume
void consume(long numTokens, BlockingStrategy blockingStrategy) throws InterruptedExceptionConsumes a specified number of tokens from the bucket.The algorithm is following:
- If bucket has enough tokens, then tokens consumed and method returns immediately.
- If bucket has no enough tokens, then required amount of tokens will be reserved for future consumption and current thread will be blocked for a time required to close deficit.
-
Note: If InterruptedException happen when thread was blocked
then tokens will be not returned back to bucket,
but you can use
Bucket.addTokens(long)to returned tokens back.
- Parameters:
numTokens- The number of tokens to consume from the bucket.blockingStrategy- specifies the way to block current thread to amount of time required to refill missed number of tokens in the bucket- Throws:
InterruptedException- in case of current thread has been interrupted during the waiting
-
consume
default void consume(long numTokens) throws InterruptedExceptionThis is just overloaded equivalent ofconsume(long, BlockingStrategy)- Parameters:
numTokens- The number of tokens to consume from the bucket.- Throws:
InterruptedException- in case of current thread has been interrupted during the waiting- See Also:
consume(long, BlockingStrategy)
-
consumeUninterruptibly
void consumeUninterruptibly(long numTokens, UninterruptibleBlockingStrategy blockingStrategy)Has same semantic withconsume(long, BlockingStrategy)but ignores interrupts(just restores interruption flag on exit).- Parameters:
numTokens- The number of tokens to consume from the bucket.blockingStrategy- specifies the way to block current thread to amount of time required to refill missed number of tokens in the bucket- See Also:
consume(long, BlockingStrategy)
-
consumeUninterruptibly
default void consumeUninterruptibly(long numTokens)
This is just overloaded equivalent ofconsumeUninterruptibly(long, UninterruptibleBlockingStrategy)- Parameters:
numTokens- The number of tokens to consume from the bucket.- See Also:
consumeUninterruptibly(long, UninterruptibleBlockingStrategy)
-
-