MicroSpaceThreadFactory.java

  1. package org.microspace.thread;

  2. import java.util.concurrent.ConcurrentHashMap;
  3. import java.util.concurrent.ThreadFactory;
  4. import java.util.concurrent.atomic.AtomicInteger;

  5. /**
  6.  *
  7.  * @author Gaspar Sinai - {@literal gaspar.sinai@microspace.org}
  8.  * @version 2017-11-04
  9.  */
  10. public class MicroSpaceThreadFactory implements ThreadFactory {
  11.     final String group;
  12.     final AtomicInteger current;
  13.     final ConcurrentHashMap<String, Thread> threads = new ConcurrentHashMap<>();
  14.    
  15.     public MicroSpaceThreadFactory (String group) {
  16.         this.group = group;
  17.         this.current = new AtomicInteger();
  18.     }
  19.    
  20.     public void shutdown() throws InterruptedException {
  21.         for (Thread t : threads.values()) {
  22.             t.interrupt();
  23.             t.join(10000L);
  24.         }
  25.         threads.clear();
  26.     }
  27.    
  28.     @Override
  29.     public Thread newThread(Runnable r) {
  30.         String threadName = group + "-" + current.incrementAndGet();
  31.         Thread ret = new Thread(r, threadName);
  32.         threads.put(threadName, ret);
  33.         return ret;
  34.     }
  35.    
  36.     public int size () {
  37.         return current.get();
  38.     }
  39. }