As Michael has mentioned yours is a special implementation of COR (Chain of Responsibility).
If your requirement is just an asynchronous multi threaded code, then COR is not a candidate pattern to be used. Instead use Customized Singleton with capability of providing next available instance from a pool of 'n' instances.
If you have requirement of handling multiple types of request, with some type of requests being handled in asynchronous way, then using COR will help.
If we see the structure of COR pattern, it contains a chain formed by links of type Handler with method handleRequest(). Each concrete Handler specializes itself in handling one type of request by implementing handleRequest() something like following
if (canHandle){
handleIt();
} else if (hasNextHandler()){
passItToNextHandler();
} else {
// complete chain is unable to handle it. So leave it may be log it
}
Now as you have two (or more) handler instances of same Concrete type in a chain, this looks like hack for violation (though it will work).
I would rather suggest keeping COR clean by linking single instance of each type of concrete handler in a chain. The handler where you need multiple instances in asynchronous way, delegate this multi threading task to an object pooling from handleRequest(). May be as a customized Singleton which handles 'n' instances instead of single.
This will separate two concerns namely COR and Object pooling. Both can be maintained independently without requirement of any Hack.