Acabo de revisar varios documentos sobre concurrencia de Clojure y encontré el ejemplo en el sitio web (http://clojure.org/concurrent_programming).Comprender el ejemplo de simultaneidad de Clojure
(import '(java.util.concurrent Executors))
(defn test-stm [nitems nthreads niters]
(let [refs (map ref (replicate nitems 0))
pool (Executors/newFixedThreadPool nthreads)
tasks (map (fn [t]
(fn []
(dotimes [n niters]
(dosync
(doseq [r refs]
(alter r + 1 t))))))
(range nthreads))]
(doseq [future (.invokeAll pool tasks)]
(.get future))
(.shutdown pool)
(map deref refs)))
entiendo lo que hace y cómo funciona, pero yo no entiendo por qué [] es necesaria la segunda función fn anónima?
Muchas gracias,
dusha.
P.S. Sin este segundo fn [] obtengo NullPointerException.