現在の Clojure バージョンの core.async では、スレッド プール エグゼキュータはclojure.core.async.impl.dispatch
名前空間に配置されています。executor
var を変更して、カスタム スレッド プールを提供できますExecutorService
。
(ns sandbox
(:require [clojure.core.async.impl.concurrent :as conc]
[clojure.core.async.impl.exec.threadpool :as tp]
[clojure.core.async :as async]))
(defonce my-executor
(java.util.concurrent.Executors/newFixedThreadPool
1
(conc/counted-thread-factory "my-async-dispatch-%d" true)))
(alter-var-root #'clojure.core.async.impl.dispatch/executor
(constantly (delay (tp/thread-pool-executor my-executor))))
(async/go
(println
(Thread/currentThread))) ;=> #<Thread Thread[my-async-dispatch-1,5,main]>
注: Core.async はまだアルファ版であるため、将来変更されることを願っています。