Performance improvement by using ArrayDeque instead of an ArrayList for the available puddle threads

I took a quick look at your project, and thought I would recommend this performance improvement.  An ArrayDeque would definitely perform better than an ArrayList for storing the available puddle threads.

I had some additional thoughts, but did not include them in this merge (I was going to let you do what you wanted to).

On line 47, when your checking if it is interrupted, the act of catching the InterruptedException would have reset the threads interrupted status.  So this check would never work like you intended (and instead would just loop forever).  I would recommend this read:
http://michaelscharf.blogspot.com/2006/09/dont-swallow-interruptedexception-call.html

On line 60, you may consider handing the exception off to "Thread.getDefaultUncaughtExceptionHandler()" if one is set.

I am not sure if this project is used or not, but I figured I would offer a little advice in case it is.  I have a lot of experience implementing pools from my Threadly project: https://github.com/threadly/threadly

Hopefully this is helpful to you!  Let me know if you have any further questions.