现在的位置: 首页 > 综合 > 正文

java5之后创建线程池的几个API 以及区别

2012年03月23日 ⁄ 综合 ⁄ 共 1709字 ⁄ 字号 评论关闭

newCachedThreadPool();

newCachedThreadPool(ThreadFactory factory);

创建一个可根据需要创建新线程的线程池,但是在之前构造的线程可用时将重用它们。对于执行很多短期异步任务的程序而言,这些线程池通常可提高程序性能。调用 execute 将重用之前构造的线程(如果线程可用)。如果现有线程没有可用的,则创建一个新线程并添加到池中。终止并从缓存中移除那些已有 60 秒钟未被使用的线程。因此,长时间保持空闲的线程池不会使用任何资源。注意,可以使用 ThreadPoolExecutor 构造方法创建具有类似属性但细节不同(例如超时参数)的线程池。 

 

newFixedThreadPool(int nThreads);

newFixedThreadPool(int nThreads,ThreadFactory threadFactory);

创建一个可重用固定线程数的线程池,以共享的无界队列方式来运行这些线程,在需要时使用提供的 ThreadFactory 创建新线程。在任意点,在大多数 nThreads 线程会处于处理任务的活动状态。如果在所有线程处于活动状态时提交附加任务,则在有可用线程之前,附加任务将在队列中等待。如果在关闭前的执行期间由于失败而导致任何线程终止,那么一个新线程将代替它执行后续的任务(如果需要)。在某个线程被显式地关闭之前,池中的线程将一直存在。  

 

newScheduledThreadPool(int nThreads);

newScheduledThreadPool(int nThreads,ThreadFactory threadFactory);

使用给定核心池大小创建一个新 ScheduledThreadPoolExecutor。该线程池的特性就是能够指定  初始延迟 、固定频率、固定延迟。来执行一个线程。返回的对象为ScheduledExecuteService,增加了定时器的操作,有以下几个方法:  

 

<V> ScheduledFuture<V>
schedule(Callable<V> callable, long delay, TimeUnit unit)
          创建并执行在给定延迟后启用的 ScheduledFuture。
 ScheduledFuture<?> schedule(Runnable command, long delay, TimeUnit unit)
          创建并执行在给定延迟后启用的一次性操作。
 ScheduledFuture<?> scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit)
          创建并执行一个在给定初始延迟后首次启用的定期操作,后续操作具有给定的周期;也就是将在 initialDelay 后开始执行,然后在 initialDelay+period 后执行,接着在 initialDelay + 2 * period 后执行,依此类推。
 ScheduledFuture<?> scheduleWithFixedDelay(Runnable command, long initialDelay, long delay, TimeUnit unit)
          创建并执行一个在给定初始延迟后首次启用的定期操作,随后,在每一次执行终止和下一次执行开始之间都存在给定的延迟。

 

newSingleThreadExecutor();

newSingleThreadExecutor(ThreadFactory factory);

创建一个使用单个 worker 线程的 Executor,以无界队列方式来运行该线程。单线程池的好处就是:如果线程在任务执行完之前被系统杀死,在线程结束之前,该线程池会创建一个新的线程来代替其执行任务。可保证顺序地执行各个任务,并且在任意给定的时间不会有多个线程是活动的。与其他等效的 newFixedThreadPool(1) 不同,可保证无需重新配置此方法所返回的执行程序即可使用其他的线程。 

抱歉!评论已关闭.