Interface RPermitExpirableSemaphore

All Superinterfaces:
RExpirable, RExpirableAsync, RObject, RObjectAsync, RPermitExpirableSemaphoreAsync
All Known Implementing Classes:
RedissonPermitExpirableSemaphore

public interface RPermitExpirableSemaphore extends RExpirable, RPermitExpirableSemaphoreAsync
Semaphore object with lease time parameter support for each acquired permit.

Each permit identified by own id and could be released only using its id. Permit id is a 128-bits unique random identifier generated each time during acquiring.

Works in non-fair mode. Therefore order of acquiring is unpredictable.

Author:
Nikita Koksharov
  • Method Details

    • acquire

      String acquire() throws InterruptedException
      Acquires a permit and returns its id. Waits if necessary until a permit became available.
      Returns:
      permit id
      Throws:
      InterruptedException - if the current thread is interrupted
    • acquire

      String acquire(long leaseTime, TimeUnit unit) throws InterruptedException
      Acquires a permit with defined leaseTime and return its id. Waits if necessary until a permit became available.
      Parameters:
      leaseTime - permit lease time
      unit - time unit
      Returns:
      permit id
      Throws:
      InterruptedException - if the current thread is interrupted
    • tryAcquire

      String tryAcquire()
      Tries to acquire currently available permit and return its id.
      Returns:
      permit id if a permit was acquired and null otherwise
    • tryAcquire

      String tryAcquire(long waitTime, TimeUnit unit) throws InterruptedException
      Tries to acquire currently available permit and return its id. Waits up to defined waitTime if necessary until a permit became available.
      Parameters:
      waitTime - the maximum time to wait
      unit - the time unit
      Returns:
      permit id if a permit was acquired and null if the waiting time elapsed before a permit was acquired
      Throws:
      InterruptedException - if the current thread is interrupted
    • tryAcquire

      String tryAcquire(long waitTime, long leaseTime, TimeUnit unit) throws InterruptedException
      Tries to acquire currently available permit with defined leaseTime and return its id. Waits up to defined waitTime if necessary until a permit became available.
      Parameters:
      waitTime - the maximum time to wait
      leaseTime - permit lease time, use -1 to make it permanent
      unit - the time unit
      Returns:
      permit id if a permit was acquired and null if the waiting time elapsed before a permit was acquired
      Throws:
      InterruptedException - if the current thread is interrupted
    • tryRelease

      boolean tryRelease(String permitId)
      Tries to release permit by its id.
      Parameters:
      permitId - permit id
      Returns:
      true if a permit has been released and false otherwise
    • release

      void release(String permitId)
      Releases a permit by its id. Increases the number of available permits. Throws an exception if permit id doesn't exist or has already been released.
      Parameters:
      permitId - - permit id
    • availablePermits

      int availablePermits()
      Returns number of available permits.
      Returns:
      number of available permits
    • getPermits

      int getPermits()
      Returns the number of permits.
      Returns:
      number of permits
    • acquiredPermits

      int acquiredPermits()
      Returns the number of acquired permits.
      Returns:
      number of acquired permits
    • trySetPermits

      boolean trySetPermits(int permits)
      Tries to set the initial number of available permits.
      Parameters:
      permits - - number of permits
      Returns:
      true if permits has been set successfully, otherwise false.
    • setPermits

      void setPermits(int permits)
      Sets the number of permits to the provided value. Calculates the delta between the given permits value and the current number of permits, then increases the number of available permits by delta.
      Parameters:
      permits - - number of permits
    • addPermits

      void addPermits(int permits)
      Increases or decreases the number of available permits by defined value.
      Parameters:
      permits - amount of permits to add/remove
    • updateLeaseTime

      boolean updateLeaseTime(String permitId, long leaseTime, TimeUnit unit)
      Overrides and updates lease time for defined permit id.
      Parameters:
      permitId - permit id
      leaseTime - permit lease time, use -1 to make it permanent
      unit - the time unit
      Returns:
      true if permits has been updated successfully, otherwise false.