diff options
author | Alex Miller <alexdmiller@yahoo.com> | 2010-10-11 10:48:13 -0400 |
---|---|---|
committer | Stuart Halloway <stu@thinkrelevance.com> | 2010-10-12 19:46:37 -0400 |
commit | 351e05a242740cc415524d03e1d424de516eed75 (patch) | |
tree | 32ca7de207124a693522526a99db489fffbb9080 | |
parent | 038e4a8b4ea1f60f8eca034a3e1e3f43f4353cc3 (diff) |
#378 set thread names on agent thread pools
Signed-off-by: Stuart Halloway <stu@thinkrelevance.com>
-rw-r--r-- | src/jvm/clojure/lang/Agent.java | 27 |
1 files changed, 22 insertions, 5 deletions
diff --git a/src/jvm/clojure/lang/Agent.java b/src/jvm/clojure/lang/Agent.java index 7d40ce77..5b6b0124 100644 --- a/src/jvm/clojure/lang/Agent.java +++ b/src/jvm/clojure/lang/Agent.java @@ -12,9 +12,11 @@ package clojure.lang; -import java.util.concurrent.*; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.ThreadFactory; +import java.util.concurrent.atomic.AtomicLong; import java.util.concurrent.atomic.AtomicReference; -import java.util.Map; public class Agent extends ARef { @@ -34,18 +36,33 @@ static final Keyword CONTINUE = Keyword.intern(null, "continue"); static final Keyword FAIL = Keyword.intern(null, "fail"); volatile Object state; - AtomicReference<ActionQueue> aq = new AtomicReference(ActionQueue.EMPTY); + AtomicReference<ActionQueue> aq = new AtomicReference<ActionQueue>(ActionQueue.EMPTY); volatile Keyword errorMode = CONTINUE; volatile IFn errorHandler = null; +final private static AtomicLong sendThreadPoolCounter = new AtomicLong(0); + +final private static AtomicLong sendOffThreadPoolCounter = new AtomicLong(0); + final public static ExecutorService pooledExecutor = - Executors.newFixedThreadPool(2 + Runtime.getRuntime().availableProcessors()); + Executors.newFixedThreadPool(2 + Runtime.getRuntime().availableProcessors(), + createThreadFactory("clojure-agent-send-pool-%d", sendThreadPoolCounter)); -final public static ExecutorService soloExecutor = Executors.newCachedThreadPool(); +final public static ExecutorService soloExecutor = Executors.newCachedThreadPool( + createThreadFactory("clojure-agent-send-off-pool-%d", sendOffThreadPoolCounter)); final static ThreadLocal<IPersistentVector> nested = new ThreadLocal<IPersistentVector>(); +private static ThreadFactory createThreadFactory(final String format, final AtomicLong threadPoolCounter) { + return new ThreadFactory() { + @Override public Thread newThread(Runnable runnable) { + Thread thread = new Thread(runnable); + thread.setName(String.format(format, threadPoolCounter.getAndIncrement())); + return thread; + } + }; +} public static void shutdown(){ soloExecutor.shutdown(); |