Since Clojure has been designed for concurrency, why does the author have to resort to Java thread pools to solve this straightforwardly parallel problem?
Because clojure has a number of built-in ways to manage state in a multi-threaded program, but does not re-implement work queues as there are quite excellent implementations bundled with the JDK. Rich Hickey mentions this during his concurrency talk, if Im not mistaken.