package org.limewire.concurrent; import java.util.concurrent.ExecutorService; import java.util.concurrent.ThreadFactory; import org.limewire.service.ErrorService; /** * Creates {@link ManagedThread} daemon threads and executes {@link Runnable * Runnables} on threads from a thread pool. Since the created threads are of * type <code> ManagedThread</code>, uncaught errors are reported to {@link * ErrorService}. */ public class ThreadExecutor { /** The factory threads are created from. */ private static final ThreadFactory FACTORY = ExecutorsHelper.daemonThreadFactory("IdleThread"); /** The thread pool to use when running threads. */ private static final ExecutorService THREAD_POOL = ExecutorsHelper.newThreadPool(FACTORY); /** * A static helper Method to create Threads. */ public static Thread newManagedThread(Runnable r) { return FACTORY.newThread(r); } /** * A static helper Method to create Threads. */ public static Thread newManagedThread(Runnable r, String name) { Thread thread = newManagedThread(r); thread.setName(name); return thread; } /** * Adds and runs the given named Runnable on a ThreadPool. */ public static void startThread(final Runnable runner, final String name) { THREAD_POOL.execute(new Runnable() { public void run() { try { Thread.currentThread().setName(name); runner.run(); } catch(Throwable t) { // Forward throwables to the handler, // and reset the name back to idle. Thread.currentThread(). getUncaughtExceptionHandler(). uncaughtException(Thread.currentThread(), t); } finally { Thread.currentThread().setName("IdleThread"); } } }); } }