Callable接口使用,需要和线程池结合。
线程池相关使用
Executors提供的静态方法初始化线程池。
ExecutorService executor = Executors.newSingleThreadExecutor();
//Executors.newFixedThreadPool();
//Executors.newCachedThreadPool();
相关静态方法底层实现分析
newCachedThreadPool()方法实现如下,即初始线程池没有创建线程(参数为0),只有在有新任务时才会创建线程去执行任务,空闲线程等待时间60秒。
public static ExecutorService newCachedThreadPool() {
return new ThreadPoolExecutor(0, Integer.MAX_VALUE,
60L, TimeUnit.SECONDS,
new SynchronousQueue<Runnable>());
}
线程池相关类的树结构
- Executor是顶层接口,仅提供execute方法;
- ExecutorService接口继承了Executor接口,丰富了接口函数;
- AbstractExecutorService抽象类实现了ExecutorService接口;
- ThreadPoolExecutor类继承了AbstractExecutorService类。
ThreadPoolExecutor与ExecutorService关系
主要区别
void execute(Runnable command);//ThreadPoolExecutor返回void
Future <?> submit(Runnable task);//ExecutorService返回Future<?>,即有返回值