Clojureの並行処理に関するさまざまなドキュメントを読み、Webサイト(http://clojure.org/concurrent_programming)の例を参照して説明しました。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)))
私はそれが何を理解し、どのように動作しますが、2番目の匿名関数fn []が必要な理由私が得ることはありませんか?
多くのありがとう、
dusha
P.S.この2番目のfn []がなければ、NullPointerExceptionが発生します。