[concurrency-interest] Setting a Thread name in a ThreadPool

Tim Peierls tim at peierls.net
Thu Oct 26 10:00:59 EDT 2006


On 10/26/06, Kevin Condon <conivek at gmail.com> wrote:
>
> Hi Mike,
>
> We use a slightly more nuanced ThreadFactory to give unique names to
> each thread.


The default ThreadFactory in j.u.c does this, too.

I think Mike was distinguishing a different name for each thread in the pool
(which you get by default) vs. a different name for each Runnable adopted by
the pool thread when it runs that Runnable.

The latter is at odds with decoupling the work to be done from the execution
policy that determines which thread does what work. The only justification I
can see for it is in debugging or monitoring, but even then I think there
are better solutions, e.g., notify the monitoring agent of pre/post-run()
events using the task identity and thread name instead of setting the thread
name from the task identity.

--tim

On 10/26/06, Mike Quilleash <mike.quilleash at subexazure.com> wrote:
> > This is simpler if you just need a single name for all threads in the
> > pool.  My requirement at the time was for a different name per runnable
> > so I had to do it differently.
> >
> > Cheers.
> >
> > -----Original Message-----
> > From: Kevin Condon [mailto:conivek at gmail.com]
> > Sent: 26 October 2006 14:05
> > To: Mike Quilleash
> > Cc: David Harrigan; concurrency-interest at cs.oswego.edu
> > Subject: Re: [concurrency-interest] Setting a Thread name in a
> > ThreadPool
> >
> > You can use:
> >
> > ThreadFactory factory = new ThreadFactory() {
> >  public Thread newThread(Runnable r) {
> >    return new Thread(r, "threadname");
> >  }
> > };
> > Executors.newCachedThreadPool(factory);
> >
> > Kevin
> >
> > On 10/26/06, Mike Quilleash <mike.quilleash at subexazure.com> wrote:
> > > I asked the same question a while back.  The solution for me was to
> > > wrap up whatever you are submitting to the executor with a Runnable.
> > >
> > > Something like
> > >
> > > Public class ThreadRenameWrapper implements Runnable {  private final
> > > String name;  private final Runnable runnable;
> > >
> > >  public ThreadRenameWrapper( String name, Runnable runnable )  {
> > >    this.name = name;
> > >    this.runnable = runnable;
> > >  }
> > >
> > >  public void run()
> > >  {
> > >    Thread thread = Thread.currentThread();
> > >    String oldName = thread.getName();
> > >
> > >    thread.setName( name );
> > >    try
> > >    {
> > >      runnable.run();
> > >    }
> > >    finally
> > >    {
> > >      thread.setName( oldName );
> > >    }
> > >  }
> > > }
> > >
> > > HTH.
> > >
> > > -----Original Message-----
> > > From: concurrency-interest-bounces at cs.oswego.edu
> > > [mailto:concurrency-interest-bounces at cs.oswego.edu] On Behalf Of David
> >
> > > Harrigan
> > > Sent: 26 October 2006 13:13
> > > To: concurrency-interest at cs.oswego.edu
> > > Subject: [concurrency-interest] Setting a Thread name in a ThreadPool
> > >
> > >
> > > Hi,
> > >
> > > Previously, if I wanted to set a thread name, I could so something
> > > like
> > > this:
> > >
> > > new Thread(new RunnableTask(), "DoSomethingWonderfulThread").start();
> > >
> > > now, if I'm delgating over to an Executors, like
> > > Executors.newCachedThreadPool(), and using that to execute my thread:
> > >
> > > ExecutorService s = Executors.newCachedThreadPool(); s.execute(new
> > > RunnableTask());
> > >
> > > The execute method isn't overloaded to provide a name, so, how do I go
> >
> > > about setting the Thread name?
> > >
> > > -=david=-
> > > --
> > > View this message in context:
> > > http://www.nabble.com/Setting-a-Thread-name-in-a-ThreadPool-tf2513566.
> > > ht
> > > ml#a7009924
> > > Sent from the JSR166 Concurrency mailing list archive at Nabble.com.
> > >
> > > _______________________________________________
> > > Concurrency-interest mailing list
> > > Concurrency-interest at altair.cs.oswego.edu
> > > http://altair.cs.oswego.edu/mailman/listinfo/concurrency-interest
> > >
> > >
> > >  This e-mail is bound by the terms and conditions described at
> > > http://www.subexazure.com/mail-disclaimer.html
> > >
> > >
> > > _______________________________________________
> > > Concurrency-interest mailing list
> > > Concurrency-interest at altair.cs.oswego.edu
> > > http://altair.cs.oswego.edu/mailman/listinfo/concurrency-interest
> > >
> >
> >
> >  This e-mail is bound by the terms and conditions described at
> http://www.subexazure.com/mail-disclaimer.html
> >
> >
> _______________________________________________
> Concurrency-interest mailing list
> Concurrency-interest at altair.cs.oswego.edu
> http://altair.cs.oswego.edu/mailman/listinfo/concurrency-interest
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: /pipermail/attachments/20061026/58263070/attachment.html 


More information about the Concurrency-interest mailing list