Search code examples
javamultithreadingexecutorservicejava.util.concurrent

How to give name to a callable Thread?


I am executing a Callable Object using ExecutorService thread pool. I want to give a name to this thread.

To be more specific, in older version I did this -

Thread thread = new Thread(runnable Task);
thread.setName("My Thread Name");

I use thread name in log4j logging, this helps a lot while troubleshooting. Now I am migrating my code from Java 1.4 to Java 1.6. I have written this(Given below)- but I dont know how to give name to this thread.

private final ExecutorService executorPool = Executors.newCachedThreadPool();
Future<String> result = executorPool.submit(callable Task);

Please give me some idea to give name to this thread?


Solution

  • You may use the overloaded method:

    java.util.concurrent.Executors.newCachedThreadPool(ThreadFactory)
    

    which allows you to pass a

    java.util.concurrent.ThreadFactory
    

    that should allow you to set the thread's names via java.util.concurrent.ThreadFactory.newThread(Runnable):

    Constructs a new Thread. Implementations may also initialize priority, name, daemon status, ThreadGroup, etc.

    Have a look at java.util.concurrent.Executors.DefaultThreadFactory for a default implementation.

    Addendum

    Since I see that this thread is still visited, Guava (if you have it available) provides a ThreadFactoryBuilder that leverages the need of having an inner anonymous class and even allows for customizing parametrized names for your threads.