Let’s say I have an application that utilizes the Executor
framework as such
Executors.newSingleThreadExecutor().submit(new Runnable(){ @Override public void run(){ // do stuff } }
When I run this application in the debugger, a thread is created with the following (default) name: Thread[pool-1-thread-1]
. As you can see, this isn’t terribly useful and as far as I can tell, the Executor
framework does not provide an easy way to name the created threads or thread-pools.
So, how does one go about providing names for the threads/thread-pools? For instance, Thread[FooPool-FooThread]
.
Advertisement
Answer
You could supply a ThreadFactory
to newSingleThreadScheduledExecutor(ThreadFactory threadFactory)
. The factory will be responsibe for creating threads, and will be able to name them.
To quote the Javadoc:
Creating new threads
New threads are created using a
ThreadFactory
. If not otherwise specified, aExecutors.defaultThreadFactory()
is used, that creates threads to all be in the sameThreadGroup
and with the sameNORM_PRIORITY
priority and non-daemon status. By supplying a differentThreadFactory
, you can alter the thread’s name, thread group, priority, daemon status, etc. If aThreadFactory
fails to create a thread when asked by returning null fromnewThread
, the executor will continue, but might not be able to execute any tasks