View Javadoc

1   /*
2    * ModeShape (http://www.modeshape.org)
3    * See the COPYRIGHT.txt file distributed with this work for information
4    * regarding copyright ownership.  Some portions may be licensed
5    * to Red Hat, Inc. under one or more contributor license agreements.
6    * See the AUTHORS.txt file in the distribution for a full listing of 
7    * individual contributors.
8    *
9    * ModeShape is free software. Unless otherwise indicated, all code in ModeShape
10   * is licensed to you under the terms of the GNU Lesser General Public License as
11   * published by the Free Software Foundation; either version 2.1 of
12   * the License, or (at your option) any later version.
13   * 
14   * ModeShape is distributed in the hope that it will be useful,
15   * but WITHOUT ANY WARRANTY; without even the implied warranty of
16   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17   * Lesser General Public License for more details.
18   *
19   * You should have received a copy of the GNU Lesser General Public
20   * License along with this software; if not, write to the Free
21   * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
22   * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
23   */
24  package org.modeshape.common.util;
25  
26  import java.util.concurrent.Executors;
27  import java.util.concurrent.ThreadFactory;
28  import java.util.concurrent.atomic.AtomicInteger;
29  
30  /**
31   * The thread factory that lets us adjust the names of the threads.
32   * 
33   * @see Executors#defaultThreadFactory()
34   */
35  public class NamedThreadFactory implements ThreadFactory {
36      static final AtomicInteger poolNumber = new AtomicInteger(1);
37      final ThreadGroup group;
38      final AtomicInteger threadNumber = new AtomicInteger(1);
39      final String namePrefix;
40  
41      public NamedThreadFactory( String poolName ) {
42          SecurityManager s = System.getSecurityManager();
43          group = (s != null) ? s.getThreadGroup() : Thread.currentThread().getThreadGroup();
44          namePrefix = (poolName != null && poolName.trim().length() != 0 ? poolName : "pool") + "-" + poolNumber.getAndIncrement()
45                       + "-thread-";
46      }
47  
48      public Thread newThread( Runnable r ) {
49          Thread t = new Thread(group, r, namePrefix + threadNumber.getAndIncrement(), 0);
50          if (t.isDaemon()) t.setDaemon(false);
51          if (t.getPriority() != Thread.NORM_PRIORITY) t.setPriority(Thread.NORM_PRIORITY);
52          return t;
53      }
54  }