ExecutorService接口是java内置的线程池接口,通过学习接口中的方法,可以快速的掌握java内置线程池的基本使用常用方法:
- void shutdown():启动一次顺序关闭,执行以前提交的任务,但不接受新任务。
- List<Runnable> shutdownNow():停止所有正在执行的任务,暂停处理正在等待的任务,并返回等待执行的任务列表。<T> Future<T> submit(Callable<T> task)执行带返回值的任务,返回一个Future对象。
- <T> Future<?> submit(Runnable task):执行Runnable任务,并返回一个表示该任务的Future。
- Future<T> submit(Runnable task, T result)执行Runnable 任务,并返回一个表示该任务的Future。
一、内置线程池
- 获取ExecutorService可以利用JDK中的Executors类中的静态方法,常用获取方式如下:
- static ExecutorService newCachedThreadPool():创建一个默认的线程池对象,里面的线程可重用,且在第一次使用时才创建;
- static ExecutorService newCachedThreadPool(ThreadFactory threadFactory):
线程池中的所有线程都使用ThreadFactory来创建,这样的线程无需手动启动,自动执行;
- static ExecutorService newFixedThreadPool(int nThreads):创建一个可重用固定线程数的线程池
- static ExecutorService newFixedThreadPool(int nThreads, ThreadFactory threadFactory:创建一个可重用固定线程数的线程池且线程池中的所有线程都使用ThreadFactory来创建;
- static ExecutorService newSingleThreadExecutor():创建一个使用单个worker线程的Executor,以无界队列方式来运行该线程;
- static ExecutorService newSingleThreadExecutor(ThreadFactory threadFactory):创建一个使用单个worker线程的Executor,且线程池中的所有线程都使用ThreadFactory来创建;
- ScheduledExecutorService是ExecutorService的子接口,具备了延迟运行或定期执行任务的能力,常用获取方式如下:
- static ScheduledExecutorService newScheduledThreadPool(int corePoolSize):创建一个可重用固定线程数的线程池且允许延迟运行或定期执行任务;
- static ScheduledExecutorService newScheduledThreadPool(int corePoolSize, ThreadFactory threadFactory):创建一个可重用固定线程数的线程池且线程池中的所有线程都使用ThreadFactory来创建,且允许延迟运行或定期执行任务;
- static ScheduledExecutorService newSingleThreadScheduledExecutor():
创建一个单线程执行程序,它允许在给定延迟后运行命令或者定期地执行。- static ScheduledExecutorService newSingleThreadScheduledExecutor(ThreadFactory threadFactory):
创建一个单线程执行程序,它可安排在给定延迟后运行命令或者定期地执行。
- ScheduledExecutorService常用方法如下:
- <V> ScheduledFuture<V> schedule(Callable<V> callable, long delay, TimeUnit unit):延迟时间单位是unit,数量是delay的时间后执行callable。
- ScheduledFuture<?> schedule(Runnable command, long delay,TimeUnit unit):延迟时间单位是unit,数量是delay的时间后执行command。
- ScheduledFuture<?> scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit):延迟时间单位是unit,数量是initialDelay的时间后,每间隔period时间重复执行一次command。
- ScheduledFuture<?> scheduleWithFixedDelay(Runnable command, long initialDelay, long delayTimeUnit unit):创建并执行一个在给定初始延迟后首次启用的定期操作,随后,在每一次执行终止和下一次执行开始之间都存在给定的延迟。