# Class ExactRateLimiter

java.lang.Object
org.apache.catalina.util.RateLimiterBase
org.apache.catalina.util.ExactRateLimiter

All Implemented Interfaces:
  `RateLimiter`

public class ExactRateLimiter extends RateLimiterBase
A RateLimiter that compromises efficiency for accuracy in order to provide exact rate limiting.

## Constructor Summary

Constructors
Constructor
Description
`ExactRateLimiter()`

## Method Summary

Modifier and Type
Method
Description
`protected String`
`getDefaultPolicyName()`
If policy name has not been specified, the first call of `RateLimiterBase.getPolicyName()` returns an auto-generated policy name using the default policy name as prefix and followed by auto-increase index.
`protected TimeBucketCounterBase`
`newCounterInstance(int duration, ScheduledExecutorService executorService)`
Instantiate an instance of `TimeBucketCounterBase` for specific time bucket size.

### Methods inherited from class org.apache.catalina.util.RateLimiterBase

`destroy, getBucketCounter, getDuration, getPolicyName, getRequests, increment, setDuration, setFilterConfig, setPolicyName, setRequests`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Methods inherited from interface org.apache.catalina.util.RateLimiter

`getPolicy, getQuota`

## Constructor Details

### ExactRateLimiter

public ExactRateLimiter()

## Method Details

### getDefaultPolicyName

protected String getDefaultPolicyName()
Description copied from class: `RateLimiterBase`
If policy name has not been specified, the first call of `RateLimiterBase.getPolicyName()` returns an auto-generated policy name using the default policy name as prefix and followed by auto-increase index.

Specified by:
  `getDefaultPolicyName` in class `RateLimiterBase`
Returns:
  default policy name, as a prefix of auto-generated policy name.

### newCounterInstance

protected TimeBucketCounterBase newCounterInstance(int duration, ScheduledExecutorService executorService)
Description copied from class: `RateLimiterBase`
Instantiate an instance of `TimeBucketCounterBase` for specific time bucket size. Concrete classes determine its counter policy by returning different implementation instances.

Specified by:
  `newCounterInstance` in class `RateLimiterBase`
Parameters:
  `duration` - size of each time bucket in seconds
  `executorService` - the executor
Returns:
  counter instance of `TimeBucketCounterBase`