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?
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.