Because WorkPool uses an unbounded LinkedList, when a consumer is not fast enough the list will be filled by the connection thread until OOM error. This is aggravated by GC pressure making consumers even slower.
I suggest using a bounded blocking queue instead.