一.线程任务接口Callable & Future&Runable
- Callable 接口类似于 Runnable,但是 Runnable 不会返回结果,并且无法抛出经过检查的异常,而它常和future与futuretask何用得到返回值。
-
Future接口:future 表示异步计算的结果。
二.任务执行器Executor
- Executor接口执行已提交的任务的对象。此包中提供的 Executor实现类实现了 ExecutorService,这是一个使用更广泛的接口。ThreadPoolExecutor类提供一个可扩展的线程池实现。Executors 类为这些 Executor 提供了便捷的工厂方法。
-
ExecutorService:执行传入的任务,可返回结果future,也可关闭,具体见文档
- ThreadPoolExecutor
- 构造器参数
corePoolSize:核心池的大小。当任务来后,会创建一个线程,当线程池中的线程数目达到corePoolSize后,就会把任务放到缓存队列当中;
maximumPoolSize:线程池最大线程数,它表示在线程池中最多能创建多少个线程;
keepAliveTime:表示线程没有任务执行时最多保持多久时间会终止。默认情况下,只有当线程池中的线程数大于corePoolSize时
unit:参数keepAliveTime的时间单位,格式为TimeUnit:
workQueue:一个阻塞队列,用来存储等待执行的任务,一般使用LinkedBlockingQueue和Synchronous。
threadFactory:线程工厂,主要用来创建线程 - 2.常用方法
public void execute(Runnable command):通过这个方法可以向线程池提交一个任务,交由线程池去执行。
public Future submit(Runnable task):它能够返回任务执行的结果。
shutdown()和shutdownNow()是用来关闭线程池的。
其他:getQueue() 、getPoolSize() 、getActiveCount()、getCompletedTaskCount()等获取与线程池相关属性的方法。
- 构造器参数
三.Executors
- 创建线程池:ExecutorService pool = Executors.newFixedThreadPool(5)
ExecutorService newCachedThreadPool()
缓存线程池,无固定大小,可以根据实际应用自动的改变数量
ExecutorService newFixedThreadPool(int size)
固定大小的线程池
ExecutorService newSingleThreadExecutor()
拥有一个线程的线程池
ScheduledExecutorService newScheduledThreadPool()
获取带有线程调度