Java多线程Callable接口、线程池
Callable和runnable对比
- 相比run()方法,可以有返回值
- ’方法可以抛出异常
- 支持泛型的返回值
- 需要借助FutureTask类,比如获取返回结果
Future接口
- 可以对具体Runnable、Callable任务的执行结果进行取消、查询是 否完成、获取结果等。
- FutrueTask是Futrue接口的唯一的实现类
- FutureTask 同时实现了Runnable, Future接口。
- 它既可以作为 Runnable被线程执行,又可以作为Future得到Callable的返回值
什么是线程池?
提前创建好多个线程,放入线程池中,使用时直接获取,使用完放回池中。可以避免频繁创建销毁、实现重复利用。
package www.fancy.thread4; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; class NumberThread implements Runnable { @Override public void run() { for (int i = 0; i <= 100; i++) { if (i % 2 == 0) { System.out.println(Thread.currentThread().getName() + i); } } } } public class ThreadPool { public static void main(String[] args) { //提供制定线程数量的线程池 ExecutorService executorService = Executors.newFixedThreadPool(10); //指定执行线程的操作 executorService.execute(new NumberThread());//用于Runnable接口 //关闭线程池 executorService.shutdown(); } }