Not sure why this is not extending ExecutorService, but components like this benefit from implementing an interface in case we wanna swap them, i.e. for testing. Java's concurrent ExecutorService interface might have some superfluous methods, but I think it would have been rightly suited here. This way, the rest of the code would have coded against an interface, i.e. ExecutorService, instead of a concrete class.