水島雄太のブログ

個人的かつ雑多なブログです。

ClojureのAgentで生成されるスレッドプールのサイズを変更する

ClojureのAgentの実装では、2 + Runtime.getRuntime().availableProcessors()で得られるサイズでスレッドプールを生成するが、このスレッドプールのサイズはset-agent-send-executor!に任意のExecutorServiceを渡して書き換えることが出来る。

set-agent-send-executor!が追加されたのはどうやらClojure1.5からのようだが、実装は、

(set! clojure.lang.Agent/pooledExecutor executor)

しているだけ。

以下のように使えばAgentのsend関数で使用されるスレッドプールを変更出来る。

(set-agent-send-executor! (Executors/newFixedThreadPool 20))