在Java 5版本中,Java内建支持线程池,新增了一个java.util.concurrent.Executors工厂类来产生线程池。Executors主要包含以下几类方法:
(1)newCachedTheradPool():用来创建一个具有缓存功能的线程池,系统根据需要创建线程,这些线程将被缓存在线程池中。
(2)newFixedTheradPool(intthreadNum):用于创建一个可重用的、固定线程数的线程池。
(3)newSingleThreadExecutor():创建单一的线程池。
(4)ScheduledThreadPool(intnum):创建具有指定线程数的线程池,它可以在指定延迟后执行线程任务。num是指池中所保存的线程数。
(5)newSingleThreadScheduledExecutor():创建单一线程的线程池,它可以在指定延迟后执行线程任务。
上面五个方法中,前三个方法返回都是一个ExecutorService对象,该对象代表一个线程池,而且是立即执行。 后两个方法返回都是一个ScheduledExecutorService对象,它是ExecutorService的子类,可以指定延迟后执行线程任务。
返回的ExecutorService有三个方法:
(1)Future<?>submit(Runnable task):将一个Runnable对象提交给指定的线程池。Future<?>是代表Runnable的返回值,但run()方法没有返回值,所以是最后返回null。可以根据Future的isDone()和isCancelled()方法来获取Runnable对象的执行状态。
(2)<T>Future<T>submit(Runnable task,T result):显式指定线程执行结束后的返回值,Future对象将在run方法执行结束后返回result。
(3)<T>Future<T>submit(Callable<T> task):将一个Callable对象提交给指定的线程池,其中Future表示Callable对象里call()方法的返回值。
返回的ScheduledExecutorService提供四个方法:
(1)ScheduledFuture<V>schedule(Callable<V> callable,long delay,TimeUnit unit):指定将在delay延迟后执行callable。
(2)ScheduledFuture<?>schedule(Runnable runnable,long delay,TimeUnit unit):指定将在delay延迟后执行runnable任务。
(3)ScheduledFuture<?>scheduleAtFixedRate(Runnable runnable,long initialDelay,long period,TimeUnitunit):指定在delay延迟后执行runnable任务,而且以设定频率重复执行,既在initialDelay后开始执行,下一次在initialDelay+period,initialDelay+2*period...处重复执行,以此类推。
(4)ScheduledFuture<?>scheduleWithFixedDelay(Runnable runnable,long initialDelay,long delay,TimeUnitunit):创建并执行一个在给定初始延迟后首次启用的定期操作,随后在每一次执行终止和下一次执行开始之间都存在给定的延迟。