@cxm-2016
2016-08-10T03:34:23.000000Z
字数 1385
阅读 2214
java no
线程数量固定的线程池,当所有线程都处于活动状态时,新任务会处于等待状态,只有核心线程并且不会回收(无超时机制),能快速的响应外界请求。
public static ExecutorService newFixedThreadPool(int nThreads) {return new ThreadPoolExecutor(nThreads,nThreads,0L,TimeUnit.MILLISECONDS,new LinkedBlockingQueue<Runnable>());}
线程数量不定,只有非核心线程没有核心线程。最大线程数是Integer.MAX_VALUE,相当于能够创建无限多的线程。由于SynchronousQueue无法插入任何任务,所以新来的任务总是会被立刻执行。该类线程适合执行大量低耗时的任务。当没有任务时,由于没有核心线程,所以实际上是几乎不占有任何系统资源的。
public static ExecutorService newCachedThreadPool() {return new ThreadPoolExecutor(0,Integer.MAX_VALUE,60L,TimeUnit.SECONDS,new SynchronousQueue<Runnable>());}
这是一个核心数限定,非核心线程无限的线程池。非核心线程闲置时会被立刻回收。此类线程池多用来执行定时任务和具有固定重复周期的任务
public ScheduledThreadPoolExecutor(int corePoolSize) {super(corePoolSize, Integer.MAX_VALUE,DEFAULT_KEEPALIVE_MILLIS, MILLISECONDS,new DelayedWorkQueue());}
该线程池仅有一个核心线程,它的作用是将所有任务使用一个线程完成,不需要处理线程同步的问题。
public static ExecutorService newSingleThreadExecutor(ThreadFactory threadFactory) {return new FinalizableDelegatedExecutorService(new ThreadPoolExecutor(1, 1,0L, TimeUnit.MILLISECONDS,new LinkedBlockingQueue<Runnable>(),threadFactory));}
示例:
scheduledThreadPool.schedule(command,2000,TimeUnit.MILLISECONDS);//2000毫秒后执行commandscheduledThreadPool.schedule(command,1000,5000,TimeUnit.MILLISECONDS);//延迟1000毫秒,每隔5000毫秒执行一次command
