SmartThreadFactory.java 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. package net.lab1024.smartadmin.util;
  2. import java.util.concurrent.ThreadFactory;
  3. import java.util.concurrent.atomic.AtomicInteger;
  4. /**
  5. * 拥有自己的thread facotry是为了jstack时候能看到是哪个线程
  6. *
  7. * @author jiaozi
  8. */
  9. public class SmartThreadFactory implements ThreadFactory {
  10. public static SmartThreadFactory create(String namePrefix) {
  11. return new SmartThreadFactory(namePrefix);
  12. }
  13. private final AtomicInteger poolNumber = new AtomicInteger(1);
  14. private final ThreadGroup group;
  15. private final AtomicInteger threadNumber = new AtomicInteger(1);
  16. private final String namePrefix;
  17. private SmartThreadFactory(String namePrefix) {
  18. SecurityManager s = System.getSecurityManager();
  19. group = (s != null) ? s.getThreadGroup() : Thread.currentThread().getThreadGroup();
  20. this.namePrefix = namePrefix + " pool " + poolNumber.getAndIncrement() + "-thread-";
  21. }
  22. @Override
  23. public Thread newThread(Runnable r) {
  24. Thread t = new Thread(group, r, namePrefix + threadNumber.getAndIncrement(), 0);
  25. if (t.isDaemon()) {
  26. t.setDaemon(false);
  27. }
  28. if (t.getPriority() != Thread.NORM_PRIORITY) {
  29. t.setPriority(Thread.NORM_PRIORITY);
  30. }
  31. return t;
  32. }
  33. }