@@ -0,0 +1,1566 @@
+package org.reactivecouchbase.concurrent;%0A%0Aimport java.util.concurrent.ExecutorService;%0Aimport java.util.concurrent.Executors;%0Aimport java.util.concurrent.ScheduledExecutorService;%0Aimport java.util.concurrent.ThreadFactory;%0Aimport java.util.concurrent.atomic.AtomicInteger;%0A%0Apublic class NamedExecutors %7B%0A%0A    public static ScheduledExecutorService newFixedThreadPool(final int size, final String prefix) %7B%0A        return Executors.newScheduledThreadPool(size, new ThreadFactory() %7B%0A            AtomicInteger counter = new AtomicInteger(0);%0A            @Override%0A            public Thread newThread(Runnable runnable) %7B%0A                return new Thread(runnable, prefix + %22-%22 + counter.incrementAndGet());%0A            %7D%0A        %7D);%0A    %7D%0A%0A    public static ExecutorService newCachedThreadPool(final String prefix) %7B%0A        return Executors.newCachedThreadPool(new ThreadFactory() %7B%0A            AtomicInteger counter = new AtomicInteger(0);%0A            @Override%0A            public Thread newThread(Runnable runnable) %7B%0A                return new Thread(runnable, prefix + %22-%22 + counter.incrementAndGet());%0A            %7D%0A        %7D);%0A    %7D%0A%0A    public static ScheduledExecutorService newSingleThreadPool(final String prefix) %7B%0A        return Executors.newSingleThreadScheduledExecutor(new ThreadFactory() %7B%0A            AtomicInteger counter = new AtomicInteger(0);%0A%0A            @Override%0A            public Thread newThread(Runnable runnable) %7B%0A                return new Thread(runnable, prefix + %22-%22 + counter.incrementAndGet());%0A            %7D%0A        %7D);%0A    %7D%0A%7D%0A

Add API to easily create named Executors