Block main on chunk read rather than looping reading from client stream. Simplify synchronization. Add JavaDocs.
print message to server log on client disconnection
Use FixedThreadPool instead of CachedThreadPool for NGStream reader threads, name threads and notify threads blocked in waitForChunk on disconnection.