Actually, after looking closer at the purging code, I think what you need is a regular ExecutorCompletionService, with the BucketPurger tasks returning the bucket id instead of null.