jhalterman / expiringmap

A high performance thread-safe map that expires entries
Apache License 2.0
1k stars 142 forks source link

Variable Expiration Map expires more than entries count in the Map #49

Open erdalbitik opened 7 years ago

erdalbitik commented 7 years ago

I used ExpiringMap with variableExpiration.

ExpiringMap<Long, Transaction> expiringMap = ExpiringMap.builder()
            .expirationPolicy(ExpirationPolicy.CREATED)
            .variableExpiration()
            .asyncExpirationListener((key, transaction) -> removeTransaction((Transaction) transaction))
            .build();

When an entry expires, removeTransaction method will be called. In this case, I put many entries with same duration (They will expire in the same time).

expiringMap.put(transactionTimestamp, transaction, ExpirationPolicy.CREATED, duration, TimeUnit.MILLISECONDS);

The problem is, removeTransaction method is called more than entries count in the expiringMap.