ThreadFactory

来源:互联网 发布:2017科普知识网络竞赛 编辑:程序博客网 时间:2024/05/22 04:59
class SimpleThreadFactory implements ThreadFactory {    public Thread newThread(Runnable r) {      return new Thread(r);    }  }


Executors.defaultThreadFactory提供了一个更有用且简单的实现。

/**      * The default thread factory      */      static class DefaultThreadFactory implements ThreadFactory {          static final AtomicInteger poolNumber = new AtomicInteger(1);          final ThreadGroup group;          final AtomicInteger threadNumber = new AtomicInteger(1);          final String namePrefix;            DefaultThreadFactory() {              SecurityManager s = System.getSecurityManager();              group = (s != null)? s.getThreadGroup() :                                   Thread.currentThread().getThreadGroup();              namePrefix = "pool-" +                            poolNumber.getAndIncrement() +                           "-thread-";          }            public Thread newThread(Runnable r) {              Thread t = new Thread(group, r,                                    namePrefix + threadNumber.getAndIncrement(),                                    0);              if (t.isDaemon())                  t.setDaemon(false);              if (t.getPriority() != Thread.NORM_PRIORITY)                  t.setPriority(Thread.NORM_PRIORITY);              return t;          }      }

下面写一简单示例。

package com.test;    import java.util.concurrent.ExecutorService;  import java.util.concurrent.Executors;  import java.util.concurrent.ThreadFactory;    class Task implements Runnable{      int taskId;      public Task(int taskId) {          this.taskId=taskId;      }            @Override      public void run() {          System.out.println(Thread.currentThread().getName()+"--taskId: "+taskId);                }  }    class DaemonThreadFactory implements ThreadFactory {      @Override      public Thread newThread(Runnable r) {          Thread t=new Thread(r);          t.setDaemon(true);          return t;      }        }  public class ThreadFactoryTest {      public static void main(String[] args) {          ExecutorService exec=Executors.newFixedThreadPool(3,new DaemonThreadFactory());          for(int i=0;i<3;i++) {              exec.submit(new Task(i));          }          exec.shutdown();      }  }  


submit()会调用DaemonThreadFactory类的newThread()方法来创建线程。

0 0
原创粉丝点击